求救,C#调用c写的dll出现的问题,急急急!!!
我在C#程序力要调用c写的dll,调用代码如下:[DllImport("HKAPI.dll")]
public static extern long HK_ListReaders(out char[] pszReaderName, out long pdwReaderNameLen, out long pdwReaderNum);
private void button1_Click(object sender, EventArgs e)
{
long len,num, ret,lDevState;
int i;
char strReaderName;
char[] pszReaderName = new char[128];
MsgList.Text = "";
DevCombo.Text= "";
num = 0;
len = pszReaderName.Length;
//枚举所有读卡器
//ret =Class1.HK_ListReaders(out pszReaderName, out len, out num);
ret = HK_ListReaders(out pszReaderName, out len, out num);
if (ret != 0)
{
MsgList.Items.Add("枚举读卡器失败");
return;
}
}
运行到“ ret = HK_ListReaders(out pszReaderName, out len, out num);
”报错“运行库遇到了错误。此错误的地址为 0x79ef06e6,在线程 0x1318 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。”
各位高手看看,问题出在哪里?? 谢。谢。谢。谢。谢。谢。了 --------------------编程问答-------------------- HK_ListReaders c的原型怎么写的
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)
最新版本:20070212
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html --------------------编程问答-------------------- 不是提示了么:用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。
--------------------编程问答-------------------- 把c的函数定义贴上来 --------------------编程问答-------------------- DWORD HK_ListReaders (
OUT char *pszReaderName,
IN OUT DWORD *pdwReaderNameLen,
OUT DWORD *pdwReaderNum
)
这是c的函数 --------------------编程问答-------------------- 请问到底哪里不对啊 --------------------编程问答-------------------- pszReaderName ,把这个类型改成string试试 --------------------编程问答-------------------- pszReaderName ,把这个类型改成string试试,程序不报错了,但是运行结果是错误的
--------------------编程问答-------------------- 将string 改成stringbulider --------------------编程问答-------------------- stringbuilder --------------------编程问答-------------------- 把这个类型改成stringbuilder试试,程序不报错了,但是运行结果还是错误的
--------------------编程问答-------------------- 返回的是什么结果? --------------------编程问答-------------------- 返回的函数结果不对 --------------------编程问答-------------------- up --------------------编程问答-------------------- 调用ret = HK_ListReaders(out pszReaderName, out len, out num);
如果正确应该返回0,现在返回的不是0
--------------------编程问答-------------------- 输出的参数有值吗? --------------------编程问答-------------------- HK_ListReaders(ref pszReaderName, ref len, ref num)
返回的pszReaderName是“”(不正确),len是0(不正确),num是6(这个返回值是对的) --------------------编程问答-------------------- stringbuilder不要带out --------------------编程问答-------------------- 还是不对啊,返回值是“-2146434903”,正确应该返回0 --------------------编程问答-------------------- ret = HK_ListReaders(pszReaderName, out len, out num)?
--------------------编程问答-------------------- ret = HK_ListReaders(pszReaderName, out len, out num)是C#调用dll啊,是不是有问题? --------------------编程问答-------------------- 把 pszReaderName 定义 [MarshalAs(UnmanagedType.BStr)]string
调用DLL出错问题最多出现在 参数类型不相符 如果DLL是自己写的 还好办 如果不是自己写的 就要问dll作者 --------------------编程问答-------------------- 顶,高手快来指教一下
补充:.NET技术 , C#