1

下面是c++ dll类

class A
{
  public: 
   int __thiscall check(char *x,char *y,char *z);
  private:
   B *temp;
};

class B
{
  friend class A;
  Public:
   B();
   B(string x,string y,string z);
   ~B();
  private:
   string x;
   string y;
   string z;
};

c++ dll方法定义如下

__declspec(dllexport) int __thiscall A::check(char *x,char *y,char *z)
{
  temp=new B(x,y,z); //getting error at this point when i am assigning memory to temp
  return 1;
}

c# dll导入是这样的

[DllImport("MyDll.dll", CallingConvention = CallingConvention.ThisCall, ExactSpelling = true, EntryPoint = "check")]
public static extern int check(IntPtr val,string x,string y,string z);

c++ dll 构建工作正常,但是当 c# 调用 c++ dll 方法时,它看起来也不错,当它进入函数并在方法的第一行中,它尝试为已在类 A 中声明为类指针的临时指针创建内存B 是私有的。它给出的错误是

Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
4

2 回答 2

0

__declspec(dllexport)应该在类(例如 class )__declspec(dllexport) MyClass上,而不是在其成员方法上。

入口点应该是一个错位的 C++ 名称(例如2@MyClass@MyMethod?zii),而不是“ check”。
您可以使用Depends.exe来查找名称。

于 2012-06-04T18:06:30.793 回答
0

我发现了问题,问题出在 C++ 中的检查函数上。温度应该是这样创建的。

int __thiscall A::check(char *x,char *y,char *z)
{
  A *xyz=new A();
  A->temp=new B(x,y,z); // doing this eliminates the issue.
  return 1;
}

感谢所有在这方面帮助我的人。

于 2012-06-05T15:20:34.657 回答