gpt4 book ai didi

c# - DLLimport 返回 gobbledygook

转载 作者:太空狗 更新时间:2023-10-29 23:51:09 27 4
gpt4 key购买 nike

我在 C++ 头文件中有这个定义

extern "C" __declspec(dllexport) const char* __stdcall GetId(const My_Polyhedron *obj);

在 C# 中有这个

[DllImport("polyhedra.dll", CallingConvention = CallingConvention.Cdecl)]      
static private extern string GetId(IntPtr obj);

它返回给我官宣

îþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþ2§{€ûW@_‹p

在 .net 4.0 中,但在 .net 3.5 中运行良好。

注意:

  1. 我已经在 DllImport 中尝试了 charset=...(所有可能的设置,例如 Charset.Unicode)。

  2. 我试着让它返回IntPtr而不是string,然后使用Marshal.PtrToStringAnsi将它转换回 >字符串

  3. 我已经尝试使用 StringBuilder 而不是 string

以上所有解决方案均无效。

最佳答案

如果您是 C++ 代码的所有者,您可以修改该函数,使其将字符串作为输出参数返回:

extern "C" __declspec(dllexport) void __stdcall GetId(
const My_Polyhedron *obj, char* result);

然后在 C# 中使用这个导入:

[DllImport("polyhedra.dll", CallingConvention = CallingConvention.Cdecl)]      
static private extern void GetId(IntPtr obj, StringBuilder result);

请注意,result 是一个 StringBuilder 而不是 string
您必须首先通过使 StringBuilder 足够大来分配足够的空间。

这样调用它:

StringBuilder result = new StringBuilder(1000);
GetId(obj, result);

使用result.ToString()获取字符串。


return 属性(它不是真正的属性)指定如何编码返回值:

[return: MarshalAs(UnmanagedType.Bool)]

但是我没有在你的代码上试过。
也许这有助于...

关于c# - DLLimport 返回 gobbledygook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23537359/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com