Laden...

DLLImport funktioniert nur im Debugger, ansonsten AccessViolationException

Erstellt von Firewire vor 10 Jahren Letzter Beitrag vor 10 Jahren 730 Views
F
Firewire Themenstarter:in
4 Beiträge seit 2012
vor 10 Jahren
DLLImport funktioniert nur im Debugger, ansonsten AccessViolationException

Hallo,

ich habe hier eine DLL, mit der man eine verschlüsselte Datei öffnen und auslesen kann.

Mein Code:



[DllImport("Reader.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int OpenDb(string filename, string pw, int n, out IntPtr handle);

private IntPtr handle = IntPtr.Zero;
private string file = "Datei";

public bool Open(string password)
{
     if (OpenDb(this.file, password, 0, out handle) == 0)
         return true;
     else
         return false;
}


Das Interessante ist nun, dass das ganze funktioniert, solange man das Programm im Debugger (also F5) ausführt. Wenn ich es normal starte (Strg + F5) dann stürzt das Programm mit einer AccessViolationException ab.

Wie kann das sein? Habt ihr eine Idee?

Danke.

Mfg
Firewire

W
872 Beiträge seit 2005
vor 10 Jahren

AccessViolation ist eine Speicherverletzung.
Du musst das Password schon an einer fixen Stelle im Password speichern, damit nicht der Garbage Collector die Adresse verschiebt, waehrend Deine externe Funktion aufgerufen ist. Stichwort Fixed-Anweisung.
Das ist jetzt aber nur ein Problem - kann gut sein, dass Du noch weitere Fehler hast.

S
248 Beiträge seit 2008
vor 10 Jahren

Hallo weismat, hallo Firewire,

es ist nicht nötig Strings, oder Arrays, zu fixieren für einen PInvoke-Aufruf, die Runtime übernimmt das für einen.

Grüße
spooky