2017-05-26 3 views
0

Ich habe ein „CLock.dll“ Zum Beispiel einige Funktionen schreiben: Das Dokument für eine FunktionWie kann ich importieren diese DLL

__int16 __stdcall dv_get_auth_code(unsigned char* auth); 

Funktion Um Berechtigungscode der Setup-Karte zu gewinnen. Parameter auth: [out] Autorisierungscode, 6 Zeichen zurückgeben. Zurück Erfolgreich, dann zurück 0.

Ich muss diese DLL in meiner Winform-Anwendung aufrufen. Ich versuche

[DllImport("CLock.dll",CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] 
public static extern int dv_get_auth_code([Out]StringBuilder auth);` 

und in Main()

Mein Code:

StringBuilder sb = new StringBuilder(); 
int result = dv_get_auth_code(sb); 

Aber es funktioniert. Was soll ich machen? Danke und einen schönen Tag noch !

Antwort

0

Es gibt zwei Fehler im Code wie dargestellt. Der Rückgabetyp ist falsch und kein Puffer ist zugeordnet.

Der Rückgabetyp ist ein 16-Bit-Typ, in C#, die short ist:

[DllImport("Clock.dll")] 
public static extern short dv_get_auth_code(StringBuilder auth); 

dann die Funktion, die Sie einen Puffer zuweisen müssen aufzurufen. Ich weiß nicht, wie groß dieser Puffer sein sollte, vermutlich wissen Sie das.

StringBuilder sb = new StringBuilder(bufferLengtg); 
short result = dv_get_auth_code(sb); 

Es ist immer ratsam, dass eine solche API die Länge des Puffers an die Funktion übergibt. Dann kann es sicherstellen, dass es den Puffer nicht überläuft.

+0

Vielen Dank. Das ist so nützlich für mich. Aber das Ergebnis gibt immer -2 zurück. Kann ich Sie mehr Informationen für diese Lösung fragen? Ich benötige eine API, um ein Programm mit einem Lock für ein Hotel Management System zu verbinden. Dies ist das erste Mal, dass ich eine API code, also ist alles schwer. – LightS

+0

Die Antwort hier ist richtig, wenn man die Frage stellt. Der Rückgabewert wird durch einen Code bestimmt, den wir nicht sehen können –