C++ 应用程序在执行以下代码时崩溃
我从下面的Dll调用了函数 testVC2.dllC++ 应用程序在执行以下代码时崩溃,c++,vb.net,C++,Vb.net,我从下面的Dll调用了函数 testVC2.dll char * getcheck(); char * getcheck(){ strcpy(Detail::AMessage, a.auth_answ.Check); return Detail::AMessage; } 我的def文件。 LIBRARY EXPORTS getcheck @1 我的VB代码是 Public Declare Function getcheck Lib "testVC2.dll" () As
char * getcheck();
char * getcheck(){
strcpy(Detail::AMessage, a.auth_answ.Check);
return Detail::AMessage;
}
我的def文件。
LIBRARY
EXPORTS
getcheck @1
我的VB代码是
Public Declare Function getcheck Lib "testVC2.dll" () As String
Console.WriteLine(getcheck() )
它给出错误,应用程序崩溃,但当我试图从函数返回整数时,它会工作。尝试返回BSTR:
#include <comutil.h>
BSTR getcheck();
BSTR getcheck(){
_bstr_t bstr1(a.auth_answ.Check);
BSTR bstr;
bstr = bstr1.copy();
return bstr;
}
#包括
BSTR getcheck();
bstrgetcheck(){
_bstr\u t bstr1(a.auth\u.answ.Check);
BSTR BSTR;
bstr=bstr1.copy();
返回bstr;
}
> p>从C++到托管语言返回字符串的正常方式是将StringBuilder作为输出参数传递。
大概是这样的:
//C++
// place your output message into str
void foo(char* str);
//C#
void foo(StringBuilder str);
感谢您的帮助,但在我的第一个演示应用程序中,我的代码正在运行。。我想知道是否有任何特权,所以它不能让我读或写?你能解释一下你所说的“第一个演示应用”是什么意思吗?你是说当你返回一个整数时?上面的代码对你有用吗?是的,实际上我是.NET新手,所以,在我开始我的原始项目之前,我创建了一个演示应用程序,当时我的代码是有效的,但现在我无法确定,“为什么它现在不起作用”。实际上我创建了三个项目。我的第一个项目包含由win32编译的DLL函数,我的第二个项目使用此DLL,它由“任何Cpu”平台混合。最后,我将我的第二个项目DLL使用到第三个项目中,该项目也在win32平台中编译,因此我尝试使用win32编译我的第二个项目,但我找不到该选项。它只显示任何CPU选项。要查找Win32选项,您应该将其作为一个新问题询问,因为如果它仅在注释中,其他用户将不会选择它。请确保您使用正确的平台目标属性编译.NET项目。我的意思是,如果你用x86编译C++,它也必须在.NET x86中。AnyCPU根据进程(x86或x64)的不同而改变其行为。我发现了它,并感谢您的帮助:-)它工作正常