如何在 C# 项目中从 C++ dll 导入导出的 char*

问题描述

我正在尝试打开一个从 C# 项目中的 Dll 导出的字符*。

由于代码太多,我会写一个与我正在编写的代码类似的简短代码。

C++:

__declspec(dllexport) typedef struct Kid {
    char* _name;
    int _age;
    int _grade;
} Kid;

Kid get_default_kid()
{
    char name[] = { "Quinn" };

    return Kid{
        name,2,7
    };
}

extern "C" __declspec(dllexport) Kid get_default_kid();

C#:

public struct Kid
{
    public string _name;
    public int _age;
    public int _grade;
}

private const string Dll2 = @"C:\Users\Me\source\repos\Tom\x64\Release\JerryDll.dll";

[DllImport(Dll2,CallingConvention = CallingConvention.Cdecl)]
private static extern Kid get_default_kid();

public static void Main(string[] args){
    Kid defaultKid = get_default_kid();

    Console.WriteLine(defaultKid._name);
    Console.WriteLine(defaultKid._age);
    Console.WriteLine(defaultKid._grade);
}

此代码在控制台中写入了一些随机字符,例如“♠”,而不是从 dll 中导出的名称。

我尝试过的:
尝试将 char* 导入为 IntPtr 然后使用:

Marshal.PtrToStringAnsi()/BSTR/Auto/Uni

Marshal.ReadIntPtr 在尝试使用上面的行阅读它之前。

我尝试在 C# 中将字符串转换为 UTF-8。

在谷歌搜索了很多。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)