2011-07-19 132 views
0

有时,如果我可以使用一些其他程序的dll并定制它们将会很好。例如,有一个名为usb uirt的设备,我可以从计算机发送ir信号。用于发送信号的软件和设备中的驱动程序都附带很多dll。因此,我尝试将它们导入Visual Studio,但无法创建参考。这可能是因为他们可能是用我认为不同的语言写成的。但有人设法得到这些库的包装,当我导入这些DLL的工作,我能够控制设备从C#这是伟大的。创建库的包装c#

无论如何,我只是好奇这一点,我想了解更多关于它...我怎么知道我什么时候可以使用这些DLL?他们在哪种语言创建?我尝试了谷歌搜索,我发现像这样的东西:

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

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

+1

首先搜索InterOp或P/Invoke:http:// pinvoke。net/ –

回答

2

你在找什么是P/Invoke

[]是什么意思?

这是您为函数调用添加属性的方式。这是DllImportAttribute

或者,如果您的意思是UInt32[]中的一组括号,那么这表示这是UInt32's的array

有时他们使用指针...

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

如何判断我什么时候可以使用这些dll?他们在哪种语言创建?

我不确定如何判断一个给定的DLL是否被管理,但是关于给定的DLL写入的语言是不相关的,编译后很难确定。

+1

我以为OP在讨论'[]'UInt32 []''''' – MusiGenesis

+0

@MusiGenesis我扩展了我的答案以防万一,但听起来有点奇怪,有人会知道属性,但被数组混淆了,默认情况下,它几乎在每种语言中都存在。 –

0

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

[]UInt32[] data表示它是一个UInt32对象的数组。这也是C#的一个标准部分。您可以在这里阅读有关C#中数组的更多信息 - Arrays (C# Programming Guide)