很急!!!!!! 我用c#调用c++写的dll 但现在出现这样的问题

“System.AccessViolationException”类型的未经处理的异常出现在SimulateCenter.exe中。其他信息:尝试读取或写入受保护的内存。... “System.AccessViolationException”类型的未经处理的异常出现在 SimulateCenter.exe 中。
其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏”

c++代码:SCSSDK_API int SSS_Mode Test(char* bS)

c#代码:
[DllImport("sss.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern int Test(out byte bS);
static void Main()
{
byte bs;
int result=Test(out bs);
}
展开
 我来答
herttfly
2012-05-08
知道答主
回答量:1
采纳率:0%
帮助的人:2.7万
展开全部
数据类型或者长度不匹配吧, C++ 里数据类型跟C#里数据类型是有差异的。
追问
我也有考虑到过,但换了其他的数据类型还是一样的错
727617686
2012-05-13 · TA获得超过712个赞
知道小有建树答主
回答量:560
采纳率:0%
帮助的人:306万
展开全部
典型的数据类型不匹配,这种情况我少说也碰到了几十次了
c++中 char* 转换成 c# 就是 string 类型
追问
string   StringBuilder 我都试全了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
桃李不言教书育人
2012-05-09 · TA获得超过1530个赞
知道小有建树答主
回答量:381
采纳率:0%
帮助的人:299万
展开全部
类型转换问题。写成public static extern int Test(string bS);试试呢,还有你的bS是out型么?
追问
换成string类型已经试过了,还是报一样的错误,bs是out,
我现在将它写成委托了也还是一样的
[DllImport("sss.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr Test(string bS);
追答
原来的函数返回类型是INT肯定不能改成IntPtr 的。写成委托也不是很合理。

参考资料: http://wenku.baidu.com/view/ce5cbfacd1f34693daef3ebd.html?st=1

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
丈室有高朋
2012-05-09 · TA获得超过242个赞
知道答主
回答量:89
采纳率:0%
帮助的人:59万
展开全部
你用StringBuilder去试试看 public static extern int Test(StringBuilder bS);
追问
调用---------------
DllInvoke dll = new DllInvoke();
private delegate int Test(out string bS);
static void main()
{
int result;
string bs=string.Empty;
Test w = (Test)dll.Test1(bstatus, typeof(Test));
result = w(out bs);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
FallenPuppet
2012-05-11 · TA获得超过128个赞
知道答主
回答量:65
采纳率:100%
帮助的人:33.7万
展开全部
C#调用C++的dll是需要转换数据类型的 我有参考资料要的话hi我
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式