我有一个C++ dll,它有一个返回c字符串的函数,我有一个C#程序,它调用这个函数并将数据返回到C#字符串。这就是我的意思
__declspec(dllexport) const char* function (const char* str) {
std::string stdString( str );
std::cout << stdString.c_str() << std::endl; // this prints fine, no data loss
return stdString.c_str();
}下面是C#代码
[DllImport("MyDLL.dll")]
public static extern string function(string data);
string blah = function("blah");
Console.WriteLine(blah); // doesn't print anything... 当我查看本地变量时,它显示变量'blah‘等于’‘。
数据发生了什么变化?
发布于 2011-12-07 10:03:54
您的C++代码已损坏。您将返回一个指向局部变量的指针。在函数返回后,它将不再存在。在C++程序中,这往往是偶然的,但却是很强的未定义行为。它不可能在互操作场景中工作,pinvoke封送拆收器对堆栈的使用将覆盖字符串。
一个可以工作的声明:
void function (const char* str, char* output, size_t outputLength)在DllImport声明中使用StringBuilder作为输出参数,并传递一个具有足够容量的初始化参数。
https://stackoverflow.com/questions/8409499
复制相似问题