c#摘引DLL,尝试读取或写入受保护的内存。这通常指示其他内存已损坏
c#引用DLL,尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
最近在对华视电子的二代身份证读卡器进行二次开发。调用里面的termb.dll,代码如下:
//源程序说明文件中对函数的说明
4.1 初始化连接
原 型:int CVR_InitComm (int Port)
说 明:本函数用于PC与华视电子第二代居民身份证阅读器的连接。
参 数:Port:连接串口或USB口
值 意义
1 串口1
2 串口2
3 串口3
4 串口4
1001 USB口1
1002 USB口2
1003 USB口3
1004 USB口4
返 回 值: 意义
1 正确
0 错误
//申明部分
[DllImport("termb.dll")]
private static extern int CVR_InitComm(int Port);
//调用部分(判断读卡器是否连接到计算机)
public static bool InitComm()
{
if ((CVR_InitComm(1001)==1)||(CVR_InitComm(1002)==1)
||(CVR_InitComm(1003)==1)||(CVR_InitComm(1004)==1))
{
return true;
}
else
{
return false;
}
}
google了好久,也没找到合适的方法。希望这里能找到解决方案。
------解决方案--------------------
出现这种情况是 传给Dll的参数类型有问题改成下面的看看:
最近在对华视电子的二代身份证读卡器进行二次开发。调用里面的termb.dll,代码如下:
//源程序说明文件中对函数的说明
4.1 初始化连接
原 型:int CVR_InitComm (int Port)
说 明:本函数用于PC与华视电子第二代居民身份证阅读器的连接。
参 数:Port:连接串口或USB口
值 意义
1 串口1
2 串口2
3 串口3
4 串口4
1001 USB口1
1002 USB口2
1003 USB口3
1004 USB口4
返 回 值: 意义
1 正确
0 错误
//申明部分
[DllImport("termb.dll")]
private static extern int CVR_InitComm(int Port);
//调用部分(判断读卡器是否连接到计算机)
public static bool InitComm()
{
if ((CVR_InitComm(1001)==1)||(CVR_InitComm(1002)==1)
||(CVR_InitComm(1003)==1)||(CVR_InitComm(1004)==1))
{
return true;
}
else
{
return false;
}
}
google了好久,也没找到合适的方法。希望这里能找到解决方案。
------解决方案--------------------
出现这种情况是 传给Dll的参数类型有问题改成下面的看看:
- C# code
[DllImport("termb.dll")] private static extern int CVR_InitComm(Int32 Port); 或 [DllImport("termb.dll", EntryPoint = "CVR_InitComm"))] private static extern int CVR_InitComm(Int32 Port);
------解决方案--------------------
估计是CVR_InitComm内部抛出了异常,用下面的代码确认一下...
- C# code
[DllImport("termb.dll")] private static extern int CVR_InitComm(int Port); public static bool InitComm() { bool result = false; try { if ((CVR_InitComm(1001) == 1) || (CVR_InitComm(1002) == 1) || (CVR_InitComm(1003) == 1) || (CVR_InitComm(1004) == 1)) { result = true; } } catch (SEHException ex) { Console.WriteLine("Unknow error occurred in the call to CVR_InitComm(...)"); } return result; }
------解决方案--------------------
顶一下 接分
------解决方案--------------------
曾经遇到过,我的问题是传入的参数类型不一直造成的
------解决方案--------------------
楼上的
- C# code
[DllImport("termb.dll")] private static extern int CVR_InitComm(int Port);
------解决方案--------------------
一般都是参数不对应
------解决方案--------------------
你的错误提示 是参数不正确造成的。.你看下说明确定这个方法 只是 int 一个参数?
------解决方案--------------------
- C# code
//依vb6的声明,c#对应的应该是这样 [DllImport("termb.dll")] private static extern Int16 CVR_InitComm(Int32 Port);