如果我可以使用其他程序dll并自定义它们,有时会很棒。例如,有一个名为usb uirt的设备,我可以从计算机发送ir信号。用于发送信号的软件很糟糕,设备上的驱动程序带有很多dll。结果,我尝试将它们导入visual studio但我无法创建引用。那可能是因为我认为它们可能是用不同的语言写成的。但有人设法得到这些库的包装器,当我导入这些dll时,它工作,我能够从c#控制设备,这是伟大的。
无论如何我只是对此感到好奇,我想了解更多...我怎么知道我什么时候可以使用这些dll?他们在哪个语言创建?我试过谷歌搜索,我发现像:
[DllImport("my.dll")]
static extern void methodA(UInt32[] data);
[]是什么意思?有时候他们使用指针......根据我的经验,我从来没有使用过指针。我总是可以在c#中通过引用传递一个变量,或者在代理人的帮助下通过值加上我不需要指针,但也许我错了......我有兴趣了解这一切。谷歌应该用什么短语来了解这一点?
答案 0 :(得分:2)
您要找的是P/Invoke。
[]是什么意思?
这是向函数调用添加属性的方法。这是DllImportAttribute
。
或者,如果您指的是UInt32[]
中的括号组,则表示这是UInt32的array。
有时他们使用指针......
可以在C#unsafe
代码中创建指针,但是为了与P / Invoke一起使用,有一个更好的系统叫marshalling。编组允许在托管C#代码和DLL中的非托管代码之间转换类型。例如,有一个IntPtr
类用于表示可以在方法声明中使用的整数指针,但通常只传入一个常规整数,编组代码会自动为你转换它。
我怎么知道我什么时候可以使用这些dll?他们在哪个语言创建?
我不确定如何判断给定的DLL是否被管理,但是关于给定DLL编写的语言是无关紧要的,并且在编译之后很难确定。
答案 1 :(得分:0)
[DLLImport]
是一个类属性。这是C#的标准部分。您可以在此处详细了解属性 - Attributes (C# and Visual Basic)
[]
中的UInt32[] data
表示它是一个UInt32对象数组。这也是C#的标准部分。您可以在此处阅读有关C#中数组的更多信息 - Arrays (C# Programming Guide)