繁体   English   中英

为库 c# 创建一个包装器

[英]create a wrapper for libraries c#

有时,如果我可以使用其他一些程序 dll 并自定义它们,那就太好了。 例如,有一个名为 usb uirt 的设备,我可以在其中从计算机发送 ir 信号。 用于发送信号的软件很糟糕,设备的驱动程序带有很多 dll。 结果,我尝试将它们导入 Visual Studio,但无法创建参考。 那可能是因为我认为它们可能是用不同的语言编写的。 但是有人设法获得了这些库的包装器,当我导入这些 dll 时,它起作用了,我能够从 c# 控制设备,这很棒。

无论如何,我只是对此感到好奇,我想了解更多关于它的信息......我怎么知道我什么时候可以使用这些 dll? 他们在哪里创建的语言是什么? 我试过用谷歌搜索,我发现了类似的东西:

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

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

您正在寻找的是P/Invoke

[] 是什么意思?

这是您向 function 调用添加属性的方式。 这是DllImportAttribute

或者,如果您指的是UInt32[]中的括号集,则这表示这是 UInt32 的数组

有时他们使用指针...

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

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

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

[DLLImport]是一个 class 属性。 这是 C# 的标准部件。 您可以在此处阅读有关属性的更多信息 -属性(C# 和 Visual Basic)

UInt32[] data中的这个[]表示它是 UInt32 对象的数组。 这也是 C# 的标准部件。 您可以在此处阅读 C# 中有关 arrays 的更多信息 - Arrays(C# 编程指南)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM