鉴于此 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# 术语中是委托”。这在这里没有多大意义,因为它将委托给什么?通过谷歌搜索找到的对其他 API 的一些类似调用使用相应 API 中的其他函数。但是在这个 API 中,没有其他调用是有意义的。
调用的文档显示了一个示例:
z4ctyget(&city, “00000”);
这似乎表明即使是静态值也可以传递。
它将用对象代替 void * 进行编译。我不知道这是否正确,我也没有机会对其进行测试(许可问题)。