首页 新闻 赞助 找找看

c#调用c++的dll,报出:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

0
悬赏园豆:100 [待解决问题]

c++

long Geton(long             hcb,                      const SSS&         UserID,                      long                  nMaxTime,                      char&                cErroCode,                      char                 szErroText[MAX_LENGTH_ERRORTEXT + 1]);

C#

 public static extern Int32 Geton(Int32 hcb, SSS UserID, Int32 nMaxTime, ref char cErroCode, ref byte[] szErroText);

问题补充: C#代码是: byte cErroCode; string szErroText; //调用 Geton(m_hCarClub, UUID2, 6000, ref cErroCode,ref szErroText); //dll引用 [DllImport("MY.dll", CharSet = CharSet.Ansi)] public static extern Int32 Geton(IntPtr hCarclub, CommonType.UUID2 UserID, Int32 nMaxTime, ref byte cErroCode,ref string szErroText); 上边的有什么地方错了? 会报出标题的错误。
camnpr的主页 camnpr | 初学一级 | 园豆:120
提问于:2011-03-29 13:23
< >
分享
所有回答(1)
0

请仔细检查你的最后两个参数 cErrorCode 和 szErroText,非托管API Geton会对这两个值做修改,

特别是 szErroText,是有MAX_LENGTH_ERRORTEXT + 1限制的,请检查你传入的 szErroText是否和其匹配.

Launcher | 园豆:45045 (高人七级) | 2011-03-29 15:24
声明变量:byte cErroCode; string szErroText;
支持(0) 反对(0) camnpr | 园豆:120 (初学一级) | 2011-03-29 17:15
//dll引用
[DllImport("MY.dll", CharSet = CharSet.Ansi)] public static extern Int32 Geton(IntPtr hCarclub, CommonType.UUID2 UserID, Int32 nMaxTime, ref byte cErroCode,ref string szErroText);
支持(0) 反对(0) camnpr | 园豆:120 (初学一级) | 2011-03-29 17:15
//调用
Geton(m_hCarClub, UUID2, 6000, ref cErroCode,ref szErroText);
支持(0) 反对(0) camnpr | 园豆:120 (初学一级) | 2011-03-29 17:15
上边3部分,对吗?
支持(0) 反对(0) camnpr | 园豆:120 (初学一级) | 2011-03-29 17:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册