【发布时间】:2013-11-20 10:22:55
【问题描述】:
我有这样的 C++ 代码只是为了尝试从 c++ dll 获取字符串到 C# 应用程序。
int GetValue(void *pBuffer)
{
int x = 0;
String^ temp;
temp = "TestStringtest1test2";
memcpy(pBuffer, &temp,sizeof(temp));
Console::WriteLine(temp);
return x;
}
在 c# 方面我所做的只是
[DllImport("Cplusplusapp.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern int GetValue(StringBuilder pBuffer);
StringBuilder Buffer = new StringBuilder(100);
int x = GetValue(Buffer);
Console.WriteLine(Buffer);
我尝试了编组和其他各种建议,但我无法理解为什么我会得到垃圾值。它相当简单,但我缺少什么。
【问题讨论】:
-
“temp”的地址本身不是字符串,那么 memcpy 将无法按预期工作。
-
你为什么要这样做?为什么要在可以处理 .NET 类型的两种语言之间传递指针?如果您的 C++ 实际上是 C++/CLI,正如使用 String^ 所建议的那样,为什么不使用 String^ 作为参数?还是作为返回值更好?为什么它甚至被用作非托管导入?