我有两个通信组件 - 一个是托管的,另一个是非托管的。托管需要从非托管实现中检索一个字符串(相同的字符串或只是一个拷贝)。我尝试了以下代码。
// Unmanaged code
const char* GetTestName(Test* test)
{
return test->getName();
}
// Managed wrapper
[DllImport(DllName, EntryPoint = "GetTestName")]
public static extern IntPtr GetTestName(IntPtr testObj);
// API Invocation
IntPtr testName = GetTestName(test);
string testStr = Marshal.PtrToStringAuto(testName);
但是,testStr 的值不是预期的值。有谁知道我在这里做错了什么?任何建议都会非常有帮助。
最佳答案
你很接近,但你必须使用 PtrToStringAnsi()。自动使用系统默认值,即 Unicode。
关于c# - 将 const char* 字符串从非托管传递到托管,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3893191/