我需要从 dll 中包含的 C api 调用函数。函数原型如下......
int func( char* name, void* value );
其中指针值的内容可以引用依赖于传递的名称的任何类型。我不确定如何设置 Dll 输入端口以正确编组此 void *。我一直在尝试使用 IntPtr ,当值是 int 时它似乎可以工作,但我无法正确检索浮点数等的值。
我正在尝试像这样导入函数......
[DllImport("dllname.dll", CharSet = CharSet.Ansi)]
public static extern int func( string name, ref IntPtr value );
请注意,值是输出。指向任何类型值的指针,即已知类型值(调用者已知)的全局内存区域中的地址。在 c prog 中,调用者将期望将此 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)