为c#库创建包装器

本文关键字:包装 创建 | 更新日期: 2023-09-27 18:02:41

如果我能使用一些其他程序dll并自定义它们,那就太好了。例如,有一种叫做usb的设备,我可以从电脑上发送红外信号。用于发送信号的软件很糟糕,设备的驱动程序带有很多dll。因此,我尝试将它们导入到visual studio中,但我无法创建参考。我想这可能是因为它们是用不同的语言写的。但是有人设法得到了这些库的包装器,当我导入这些dll时,它工作了,我能够从c#控制设备,这很棒。

无论如何,我只是好奇这个,我想了解更多关于它…我怎么知道我什么时候可以使用这些dll ?他们是用什么语言创造的?我试着谷歌一下,我找到了这样的东西:

[DllImport("my.dll")]
static extern void methodA(UInt32[] data);

[]是什么意思?有时他们使用指针……根据我的经验,我从来没有使用过指针。我总是可以在c#中通过引用或值传递变量,再加上委托的帮助,我没有发现需要指针,但也许我错了……我有兴趣了解这一切。我应该谷歌什么短语来了解这个?

为c#库创建包装器

您要找的是p/Invoke

[]是什么意思?

这是你给函数调用添加属性的方式。这是DllImportAttribute .

或者,如果您指的是UInt32[]中的括号集合,那么这表示这是一个UInt32的数组。

有时他们使用指针…

在c# unsafe代码中创建指针是可能的,但是对于使用p/Invoke,有一个更好的系统称为封送。封送允许在托管c#代码和DLL中的非托管代码之间进行类型转换。例如,有一个IntPtr类用于表示指向整数的指针,您可以在方法声明中使用,但您通常只是传递一个常规整数,编组代码将自动为您转换它。

我怎么知道我什么时候可以使用这些dll ?他们是用什么语言创造的?

我不确定如何判断给定的DLL是否被管理,但关于给定的DLL是用什么语言编写的是无关紧要的,并且很难在编译后确定。

[DLLImport]是一个类属性。这是c#的一个标准部分。你可以在这里阅读更多关于属性的内容-属性(c#和Visual Basic)

UInt32[] data中的[]表示它是一个包含UInt32对象的数组。这也是c#的一个标准部分。你可以在这里阅读更多关于c#数组的内容-数组(c#编程指南)