c# - 将 const char* 字符串从非托管传递到托管

标签 c# c++ interop pinvoke intptr

我有两个通信组件 - 一个是托管的,另一个是非托管的。托管需要从非托管实现中检索一个字符串(相同的字符串或只是一个拷贝)。我尝试了以下代码。

// 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/

相关文章:

c++ - 在当前位置自行移动光标

c++ - const 成员未显式初始化但编译

c++ - 如何移动二维指针数组中的行元素

linux - 在 OS X 下运行 Linux 二进制文件

c# - DLLimport 无法加载 dll

c# - 使用 NodaTime 正确处理开放时间

c# - 自定义,复杂的动态反射解决方案-C#

c# - 免版税和免费音效

c# - 当我使用 regasm 时,所有参数都输入为输入?那可以改变吗?

java - 从 Java 使用大量 C++ 代码的快速(以开发人员时间为单位)方式