问题描述
我正在尝试打开一个从 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 (将#修改为@)