c#调用DLL时尝试读取或写入受保护的内存.这通常指示其他内存已损坏.

C++:char*__stdcallunCompressString(char*str){char*s=newchar[strlen(str)+1];strcpy(s,s... C++:
char* __stdcall unCompressString(char* str)
{
char *s = new char[strlen(str)+1];
strcpy(s,str);
return s;
}

C#:
[DllImport("F:\\调用C的DLL试验\\Debug\\MyZlibDLL.dll")]
public static extern string unCompressString(string str);

//调用
textBox2.Text = unCompressString(textBox1.Text);

求大神解答
展开
 我来答
空雪梦见
2014-12-30 · TA获得超过5598个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1202万
展开全部
没做试验,下面是目测发现的问题:

1、new出来的字符串这样返回回去以后就没办法释放了。内存泄漏不可避
2、char*对应的是多字节编码的字符,所以DllImport里面要注明 CharSet=CharSet.ANSI

对于1,你可以通过CoTaskMemAlloc来分配内存,这样在C#这里就会被正确释放了。
这个函数和malloc除了函数名不一样其他都一样。声明在windows.h(更进一步应该是在objbase.h)里面,导入在Ole32.lib里面
百度网友62f3ff92b
2014-12-30 · TA获得超过147个赞
知道答主
回答量:48
采纳率:0%
帮助的人:21.1万
展开全部
DllImport 好像不能带路径吧? 尤其还是中文的?!
追问
可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式