我该如何导入这个Dll

时间:2017-05-26 03:17:00

标签: api dllimport

我有一个" CLock.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);

但它正在发挥作用。我该怎么办?谢谢你,祝你有愉快的一天!

1 个答案:

答案 0 :(得分: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总是明智地将缓冲区的长度传递给函数。然后它可以确保它不会超出缓冲区。