首页 新闻 会员 周边 捐助

C#调用dll出现"尝试读取或写入受保护的内存”

0
悬赏园豆:50 [已解决问题] 解决于 2016-02-22 10:44

C#调用dll在win7,win10,VS2010下运行正常,但在winXP中出现"尝试读取或写入受保护的内存”,求助!

调用代码:

_res = IsRs485(_rs485Address) ?
Reader2800.ConnectScanner485(ref _mHScanner, com, baud, _rs485Address) :
Reader2800.ConnectScanner(ref _mHScanner, com, baud);

ConnectScanner方法:

// apiReturn _stdcall ConnectScanner(HANDLE *hScanner, char *szPort, int nBaudRate);
[DllImport(dllPath, EntryPoint = "ConnectScanner", SetLastError = true,
CharSet = CharSet.Ansi, ExactSpelling = false,
CallingConvention = CallingConvention.StdCall)]
public static extern ushort ConnectScanner(ref IntPtr hScanner, string szPort, int nBaudRate);

ConnectScanner485方法:

//apiReturn _stdcall ConnectScanner485(HANDLE *hScanner, char *szPort, int nBaudRate);
[DllImport(dllPath, EntryPoint = "ConnectScanner485", SetLastError = true,
CharSet = CharSet.Ansi, ExactSpelling = false,
CallingConvention = CallingConvention.StdCall)]
public static extern ushort ConnectScanner485(ref IntPtr hScanner, string szPort, int nBaudRate, int address);

三余.无梦生的主页 三余.无梦生 | 初学一级 | 园豆:52
提问于:2016-02-21 22:24
< >
分享
最佳答案
0

参数不匹配,之前遇到过这样的问题。检查一下你的入参。或者是该dll不支持XP

收获园豆:25
木乌 | 小虾三级 |园豆:1015 | 2016-02-22 09:02
其他回答(4)
0

方法参数不匹配

收获园豆:25
KellyZheng | 园豆:237 (菜鸟二级) | 2016-02-22 00:38

是哪一个参数?要如何匹配?

支持(0) 反对(0) 三余.无梦生 | 园豆:52 (初学一级) | 2016-02-22 08:21
0

应该是该DLL 不支持XP

影子博客 | 园豆:202 (菜鸟二级) | 2016-02-22 10:08
0

调用非c#的代码,调用了非托管的dll[DllImport(dllPath, EntryPoint = "ConnectScanner485", SetLastError = true,
CharSet = CharSet.Ansi, ExactSpelling = false,
CallingConvention = CallingConvention.StdCall)]

然后参数越界,导致内存访问失败。

眼子沙 | 园豆:204 (菜鸟二级) | 2016-02-23 17:33
0

第一 dll 不支持xp ,第二xp是否有参数或者配置不同。

Martin cheng | 园豆:204 (菜鸟二级) | 2016-02-25 11:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册