gpt4 book ai didi

c# - 当 c# 访问 c++ dll 时尝试读取或写入 protected 内存错误

转载 作者:太空宇宙 更新时间:2023-11-04 14:16:23 28 4
gpt4 key购买 nike

下面是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 类的指针是私有(private)的。它给出的错误是

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

最佳答案

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

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

关于c# - 当 c# 访问 c++ dll 时尝试读取或写入 protected 内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10885846/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com