当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何将void*CAPI导入C#?》经验,为你挑选了1个好方法。

鉴于此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”);

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

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



1> JaredPar..:

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

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

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有