我有一个" 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);
但它正在发挥作用。我该怎么办?谢谢你,祝你有愉快的一天!
答案 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总是明智地将缓冲区的长度传递给函数。然后它可以确保它不会超出缓冲区。