2017-05-26 38 views
0

我有一個「CLock.dll」有一些功能 例如:這是文檔的功能如何導入這個DLL

__int16 __stdcall dv_get_auth_code(unsigned char* auth); 

功能 爲了獲得設置卡的授權碼。 參數 auth:[out]返回授權碼,6個字符。 返回 成功,然後返回0.

我需要在我的winform應用程序中調用此dll。我嘗試

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

,並在main()

我的代碼:

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

但它的工作。我該怎麼辦?謝謝你,祝你有美好的一天 !

回答

0

代碼中存在兩個錯誤。返回類型錯誤,沒有分配緩衝區。

的返回類型是16位的,在C#是short

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

然後打電話給你需要分配一個緩衝的作用。我不知道這個緩衝區應該有多大,據推測你知道這個。

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

這樣的API將緩衝區的長度傳遞給函數總是明智的。然後它可以確保它不會超出緩衝區。

+0

非常感謝。這對我來說非常有用。但結果總是返回-2。 我可以問你這個解決方案的更多信息嗎?我需要編寫一個API來將程序連接到酒店管理系統的鎖。這是我第一次編碼一個API,所以一切都很難。 – LightS

+0

給出這個問題的答案是正確的。返回值由我們無法看到的代碼確定 –