Freigabe von SAFEARRAY von c ++ DLL und c #

9

Ich habe eine C ++ Funktion, die Daten bekommt und ich habe sie von c # aufgerufen. Die Funktion erhält einen Zeiger auf SAFEARRAY und poplate es mit Zeichenfolgen (mit SysAllocString)

Alles ist in Ordnung, aber das Programm verliert Speicher.

Ich habe ein wenig gesucht und festgestellt, dass wenn ich dieses Attribut der Methodensignatur hinzufüge:

%Vor%

Ich muss es in C ++ Code freigeben (wo es zugewiesen wurde), also habe ich diese Funktion erstellt

%Vor%

Und in meiner DLL habe ich diesen Code geschrieben

%Vor%

Aber ich habe eine Ausnahme:

  

In Tester.exe ist eine nicht behandelte Ausnahme vom Typ 'System.AccessViolationException' aufgetreten.

     

Zusätzliche Information: Es wurde versucht, geschützten Speicher zu lesen oder zu schreiben. Dies ist oft ein Hinweis darauf, dass anderer Speicher beschädigt ist.

Was ist los?

    
SharonL 16.07.2011, 18:35
quelle

1 Antwort

5

Ich denke, du solltest es versuchen:

%Vor%

Der Grund dafür ist, dass Sie strServerList als out deklarieren, so dass der .Net-Marshaller versucht, einen Zeiger auf einen ungültigen (freigegebenen) Speicher in ein Array von Zeichenfolgen zu konvertieren, was die Ausnahme auslösen kann.

    
yms 26.07.2011 20:37
quelle

Tags und Links