gpt4 book ai didi

c# - 如何使用平台调用编码 void*

转载 作者:太空狗 更新时间:2023-10-29 18:19:20 24 4
gpt4 key购买 nike

我需要从包含在 dll 中的 C api 调用一个函数。函数原型(prototype)如下....

int func( char* name, void* value );

其中指针值的内容可以引用依赖于传递的名称的任何类型。我不确定如何设置 Dll 输入以正确编码此 void *。我一直在试验 IntPtr,当值为 int 时它似乎可以工作,但我无法正确检索 float 等的值。

我正在尝试像这样导入函数...

[DllImport("dllname.dll", CharSet = CharSet.Ansi)]
public static extern int func( string name, ref IntPtr value );

请注意,值是一个输出。指向任何类型的值的指针,即已知类型(调用者已知)的值在全局内存区域中的地址。在 c 程序中,调用者将被期望将此 void * 转换为所需的类型并取消引用以获取存储在那里的实际值。到目前为止给出的答案似乎是基于一个假设,即函数会将结果写入传入的指针位置。我的错,因为我没有说得太具体。对不起。 C# 不是我的包,我什至不知道 IntPtr 是否是去这里的路......

最佳答案

解决此问题的最佳方法是提供函数重载,以便在 C# 端一切都干净利落。像这样:

[DllImport("dllname.dll", CharSet = CharSet.Ansi)]
public static extern int func(string name, out int value);
[DllImport("dllname.dll", CharSet = CharSet.Ansi)]
public static extern int func(string name, out float value);
// etc, one each for each type

关于c# - 如何使用平台调用编码 void*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3854631/

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