gpt4 book ai didi

c# - 如何将 void * C API 导入 C#?

转载 作者:太空狗 更新时间:2023-10-29 17:41:13 27 4
gpt4 key购买 nike

给定此 C API 声明如何将其导入 C#?

int _stdcall z4ctyget(CITY_REC *, void *);

我已经走到这一步了:

   [DllImport(@"zip4_w32.dll",
CallingConvention = CallingConvention.StdCall,
EntryPoint = "z4ctygetSTD",
ExactSpelling = false)]
private extern static int z4ctygetSTD(ref CITY_REC args, void * ptr);

自然地,在 C# 中,“void *”无法编译。

一些谷歌搜索表明它应该被翻译为“对象”。这似乎应该有效。但其他人指出“Void * 在 C/C++ 术语中称为函数指针,在 C# 术语中称为委托(delegate)”。这在这里没有多大意义,因为它将委托(delegate)给什么?通过谷歌搜索找到的对其他 API 的一些类似调用使用相应 API 中的其他函数。但在此 API 中,没有其他调用有意义。

调用的文档显示了一个示例:

z4ctyget(&city, “00000”);

这似乎表明甚至可以传递静态值。

它将用 object 代替 void * 进行编译。我不知道这是否正确,而且我还没有机会对其进行测试(许可问题)。

最佳答案

对于 void* 参数,您可以只使用 IntPtr

  [DllImport(@"zip4_w32.dll",
CallingConvention = CallingConvention.StdCall,
EntryPoint = "z4ctygetSTD",
ExactSpelling = false)]
private extern static int z4ctygetSTD(ref CITY_REC args, IntPtr ptr);

关于c# - 如何将 void * C API 导入 C#?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/521774/

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