题目
C#调用C++的dll总是报错 Attempted to read or write protected memory.Attempted to read or write p……
C#代码:
[DllImport("duxie.dll",EntryPoint = "lala",CharSet = CharSet.None)]
public static extern string lala();
private void button1_Click(object sender,RoutedEventArgs e)
{
string a = lala();//////////此处报错
}
错误为:Attempted to read or write protected memory.Attempted to read or write protected memory.
另外,dll本身的返回值是char*
我是新手,希望大家多多指教,最好详细一点,我会多加分的,
C#代码:
[DllImport("duxie.dll",EntryPoint = "lala",CharSet = CharSet.None)]
public static extern string lala();
private void button1_Click(object sender,RoutedEventArgs e)
{
string a = lala();//////////此处报错
}
错误为:Attempted to read or write protected memory.Attempted to read or write protected memory.
另外,dll本身的返回值是char*
我是新手,希望大家多多指教,最好详细一点,我会多加分的,
提问时间:2020-11-03
答案
建议动态库不要返回字符串指针.而是在参数中传递.
基本上没有见过动态库中返回字符串指针的.看看所有WIN32的API,应该是没有的
返回字符串是在C++中产生的,而C#的GC机制会试图销毁这个字符串
估计这时就出现你说的这个错误了
作为引参传递时,参数内存是以C#分配的,所以GC机制可以自动回收它的内存.
解释的可能不是很好,很简单,这个错误的意思应该 是:C#不能读写C++产生的内存.
当然,肯定有别的方法可以读写.不在本问题中了.
基本上没有见过动态库中返回字符串指针的.看看所有WIN32的API,应该是没有的
返回字符串是在C++中产生的,而C#的GC机制会试图销毁这个字符串
估计这时就出现你说的这个错误了
作为引参传递时,参数内存是以C#分配的,所以GC机制可以自动回收它的内存.
解释的可能不是很好,很简单,这个错误的意思应该 是:C#不能读写C++产生的内存.
当然,肯定有别的方法可以读写.不在本问题中了.
举一反三
已知函数f(x)=x,g(x)=alnx,a∈R.若曲线y=f(x)与曲线y=g(x)相交,且在交点处有相同的切线,求a的值和该切线方程.
我想写一篇关于奥巴马的演讲的文章,写哪一篇好呢?为什么好
奥巴马演讲不用看稿子.为什么中国领导演讲要看?
想找英语初三上学期的首字母填空练习……
英语翻译
最新试题
- 1在显微镜放大倍数为100倍时,能看到八个细胞,如果显微镜的放大倍数为400倍,那我们 在显微镜放大?
- 2从R的二次方a1=(1 0),a2=(1 -1)到基b1=(1 1),b2(1 2)的过度矩阵为()
- 3人生得一知已足矣,斯世当以同怀视之.
- 4他们最近一直在学英语,用英语怎么说,火速
- 5请用一元一次方程
- 6The story happened _____ a late fall evening. A:in B:on C:at D:for.选哪个?并要句子翻译
- 7可以给几个三段论的例子吗?越简单越好.主要理解如果做三段论
- 8为什么青蛙能在陆地和水中生活,靠的是什么
- 9一桶水,用去它的五分之二,正好是16千克,这桶水重多少千克?3Q
- 103.5乘4的积,减一个数的8倍,差是5.6,求这个数
热门考点
- 1十五个号,每次随手去抓出一个号,以这样的方法,能用随机概率论与数理统计算出下次抓到的结果吗?
- 2关于物理的光现象
- 3设函数F(X)=X^3+x,X属于R,若0≤θ≤90度时,F(msinθ) F(1-m)>0恒成立,则m的取值范围是?
- 4目前世界上发电量最大的核电站叫什么?在哪个国家?发电量有多少?相当于几个水电站?
- 5小刚25分走了2千米,平均每分走全程的几分之几,是几分之几千米?
- 6日食只能发生在农历
- 7谁有英语国家社会与文化入门上册的课后答案
- 8"主忠信,毋友不如己者,过则勿惮改"怎么翻译?
- 91/20*(14-2·5)+1/30*(14-x)=1
- 1022g的二氧化碳的分子数是0.5mol,为什么是错的