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?
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.