在调用c ++函数时尝试读/写受保护的内存错误

时间:2013-12-23 16:16:03

标签: c# c++ pinvoke

我有一个C ++项目X,调用约定设置为__stdcall(/ Gz)和C#项目Y.

我已经在这两个项目中定义了一个类myClass。

class myClass
{
    private:int mem1;
};

在类的C#定义中,我用

作为前缀
[StructLayout(LayoutKind.Sequential)]

C ++函数是

 _declspec (dllexport) void getLen(myClass* str)
 {
     printf("%s",sizeof(int));
 }

在Y中,我已将函数定义如下

[DllImport("X.dll")]
private static extern void getLen(ref myClass str);

我这样称呼它:

getLen(ref str);

其中str是myClass类型的对象。

运行此解决方案时,为什么会出现此错误?

1 个答案:

答案 0 :(得分:2)

您的问题出在printf()调用中:"%s"需要指向以空字符结尾的字符串的指针,但您提供的是size_t