在c++中删除类实例时出错
本文关键字:实例 出错 删除 c++ | 更新日期: 2023-09-27 17:51:14
我有下面的c++代码:
someclass* my = new someclass();
my->doSomething();
delete my;
当我从另一个c++项目中调用这个类时,它正好工作得很好。
但是当我在c#中调用它时,它会给我一个错误,我无法跟踪这个错误。
这是我如何从c#中调用c++ dll。
[DllImport(@"Helper.dll", CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.BStr)]
private static extern string LoginQuery(string UserID, string UserPW, string ProxyServer, StringBuilder Cookies);
这是c++代码。
extern "C" FUNCDLL_API BSTR LoginQuery(const char* UserID, const char* UserPW, const char* ProxyServer, char Cookies[])
{
someclass* my = new someclass();
std::string ret my->doSomething();
delete my; --> here, I get error when called from C#.
return ::SysAllocString(CComBSTR(ret.c_str()).Detach());
}
谁能解释一下原因?编辑LoginQuery从类返回一些结果。
编辑我改了代码。
编辑错误消息如下所示。从韩语翻译成英语。
附加信息:运行时发生严重错误。错误地址是0x6799bd26(线程0x2860)。错误码为0xc0000005。此错误可能是不安全或CLR的一部分,也可能是用户代码中未经确认的一部分。通常这个错误的原因是com互操作或封送错误,它可以破坏堆栈。
如果有处理此异常的处理程序,则可以安全地继续执行程序。
您需要在将my赋值为null之前删除它。
另外,看起来你返回的是std::string,而返回类型是BSTR。
另外,尝试将您的文件输入行更改为:
[DllImport(@"Helper.dll", EntryPoint="LoginQuery", CharSet = CharSet. dll]Unicode, CallingConvention = CallingConvention. cdecl]