C# 调用C++DLL的问题“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。” 15
我用C#开发一个项目,需要饮用C++的DLL,但是调用其中的方法是有几个函数正常,有一些方法总是报错。错误为:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”哪...
我用C#开发一个项目,需要饮用C++ 的DLL,但是调用其中的方法是有几个函数正常,有一些方法总是报错。
错误为:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”
哪位大神可以帮我看看。
这是DLL中的方法:
typedef struct ehInformation
{
std::string ehfilename;
std::string mark; //eh头文件的标示
std::string sendAddr; //eh头文件的发送地址
std::vector<std::string> recvAddrs; //eh头文件的接收地址
std::string type; //eh头文件的类型
std::string content; //eh头文件的发送内容
std::vector<std::string> attachs; //eh头文件的附件
std::string status; //邮件状态(ehr文件使用)
}EHINFOR;
typedef int DmailHandle;
int dmail_create(DmailHandle handle, EHINFOR& ehinfo, std::string& errdesc, int flag = 0);
以下是C#代码:
public struct ehInformation
{
public string ehfilename;
public string mark; //eh头文件的标示
public string sendAddr; //eh头文件的发送地址
public ArrayList recvAddrs;
//public string[] recvAddrs; //eh头文件的接收地址
public string type; //eh头文件的类型
public string content; //eh头文件的发送内容
public ArrayList attachs;
//public string[] attachs; //eh头文件的附件
public string status; //邮件状态(ehr文件使用)
}
[DllImport("dmailnewclient.dll", EntryPoint = "?dmail_create@@YAHAAIAAUehInformation@@AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z", CharSet = CharSet.Ansi,SetLastError = true, CallingConvention = CallingConvention.StdCall)]
public static extern int Dmail_Creat(uint handle, ehInformation ehInfor, string errdesc, UInt16 flag = 0);
调用:
string errdesc ="111";
int temp = dmailnewclient.Dmail_Creat(t,ehinfo, errdesc); 展开
错误为:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”
哪位大神可以帮我看看。
这是DLL中的方法:
typedef struct ehInformation
{
std::string ehfilename;
std::string mark; //eh头文件的标示
std::string sendAddr; //eh头文件的发送地址
std::vector<std::string> recvAddrs; //eh头文件的接收地址
std::string type; //eh头文件的类型
std::string content; //eh头文件的发送内容
std::vector<std::string> attachs; //eh头文件的附件
std::string status; //邮件状态(ehr文件使用)
}EHINFOR;
typedef int DmailHandle;
int dmail_create(DmailHandle handle, EHINFOR& ehinfo, std::string& errdesc, int flag = 0);
以下是C#代码:
public struct ehInformation
{
public string ehfilename;
public string mark; //eh头文件的标示
public string sendAddr; //eh头文件的发送地址
public ArrayList recvAddrs;
//public string[] recvAddrs; //eh头文件的接收地址
public string type; //eh头文件的类型
public string content; //eh头文件的发送内容
public ArrayList attachs;
//public string[] attachs; //eh头文件的附件
public string status; //邮件状态(ehr文件使用)
}
[DllImport("dmailnewclient.dll", EntryPoint = "?dmail_create@@YAHAAIAAUehInformation@@AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z", CharSet = CharSet.Ansi,SetLastError = true, CallingConvention = CallingConvention.StdCall)]
public static extern int Dmail_Creat(uint handle, ehInformation ehInfor, string errdesc, UInt16 flag = 0);
调用:
string errdesc ="111";
int temp = dmailnewclient.Dmail_Creat(t,ehinfo, errdesc); 展开
展开全部
ehInformation 加Layout
传参加ref
传参加ref
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询