首页 新闻 会员 周边 捐助

尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

0
悬赏园豆:5 [已解决问题] 解决于 2013-09-10 13:16

C# 调用C的Dll时,单独运行dll里的函数,结果没有问题;当C#调用C的dll时就会出现这个提示,尝试怎么修改都不行。有人的解决方法是将dll里函数需要返回的局部变量声明为static,但我的DLL函数返回值类型就是这样声明的。。。

 

有哪位大神帮助我把

adaan的主页 adaan | 初学一级 | 园豆:193
提问于:2013-01-29 11:51
< >
分享
最佳答案
0

前断时间我刚遇到过这样的情况,后面发现是在重写函数的时候缺少参数,你认真检查下吧

 

DllImport 

收获园豆:5
八戒的师傅 | 小虾三级 |园豆:1472 | 2013-01-29 21:26
其他回答(1)
0

贴函数定义和调用代码。

Launcher | 园豆:45050 (高人七级) | 2013-01-29 11:54

[DllImport(@"message.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern int sel_account_register(string name, string password, string profile);

调用代码:int i = SelInterface.sel_account_register(string.Empty, string.Empty, string.Empty);

支持(0) 反对(0) adaan | 园豆:193 (初学一级) | 2013-01-29 12:57

@adaan: 看你的定义 int sel_account_register(string name, string password, string profile),返回值是值类型,怎么可能会有你提到的 “应该返回int类型的函数返回值为空”?

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2013-01-29 13:35

@Launcher: 其实只要调用sel_account_register(string name, string password, string profile)就出现了问题,还没有返回值。。单独测试Dll的时候是正常的。。

支持(0) 反对(0) adaan | 园豆:193 (初学一级) | 2013-01-29 14:59

@adaan: 出啥问题?

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2013-01-29 15:01

@adaan: 你这样:

public static extern int sel_account_register(StringBuilder name,StringBuilder password, StringBuilder profile);

StringBuilder name = new StringBuilder(1000);

StringBuilder password= new StringBuilder(1000);

StringBuilder profile= new StringBuilder(1000);

我上面是猜测C++的 API 接口定义是 char* ,最好你能贴出它的C++ API 定义来。

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2013-01-30 15:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册