看了一个别人做的QR二维码的调用,然后自己试着调用,发现根本无从下手。
每次到参数配置,就不知道怎么弄了,查了一堆资料,搬运过来给大家看看。
输入简体字,点下面繁体字按钮进行在我要如何使用
labview 来呼叫动态连接函式库 (Dynamic Link Library DLL)?
问题:
我要如何使用 LabVIEW 来呼叫DLL?
解答:
如要在 LabVIEW 底下呼叫 DLL, 您必须先了解它的型态是什么. 基本上DLL会有两种型态; C/C++ DLL 和 Microsoft .NET Assembly. 製造C/C++型态的DLL可用 C, C++ 或其他语言 (.NET 语言除外) 像是 Java, Fortran 或 Visual Basic 6.0. .NET的DLL可被称为 .NET Assembly 或 Assembly. 对于以上这两种型态与不同名称的DLL来说, 不同的地方是, .NET 的 DLL与其它的DLL不太一样. .NET DLL 使用的是 Common Language Run
time (CLR) 和 .NET Framework 来管理DLL内的功能.
如果使用的是 C/C++ 的 DLL
1. 找到它的标头档 (header file *.h) 或它的函数原型定义.
2. 决定您想要使用的函数. 请注意这些函数的参数是否是最基本的型态像是 int, char, double 或者它们是比较複杂的型态像是 structs, arrays 或 vectors.
3. 如果您的函数没有任何複杂的参数而且您也有它的标头档, 那您就可以使用 LabVIEW 裡一个很方便的工具来做引进 ( 引进后它还可以把DLL裡的函数做成一个函式库). 此工具可在 Tool>>Import>> Shared Library (.dll) 开启. 开启后您就可以按照它的使用精灵来进行引进.
4. 如果您的函数没有任何複杂的参数但您没有它的标头档. 那您可以先确认他是否是C/C++类型的DLL, 因为C/C++类型的DLL通常在他们的开发环境下都会产生标头档. 但如果找不到, 您就必须研究此DLL的文件来了解函数裡参数的定义. 接著, 您就可以使用 Call Library Function Node 功能来手动式的呼叫您的函数.
5. 如果您的函数需要呼叫到複杂的参数, 那您就必须使用LabVIEW 裡的 Call Library Function Node 功能来呼叫此DLL并用它来定义DLL内的原型参数 (如果您的DLL是用Type Library来编辑的, 那它的参数与回传型态就会自动的被定义).
如果您複杂的函数型态是一个包含很多基本型态 (如: int, double, char) 的 struct, 那最单纯的方式就是製造一个 C 语言底层的包装档 (wrapper DLL). 由于C/C++的参数不一定跟LabVIEW 的参数对的上, 包装档DLL可以把複杂的参数转换成比较基本的参数. 比如说, 如果您有一个 C 写的struct 裡面包著一个char* (文字或文字阵列) 的参数, 那您可以製造一的包装档功能来让 LabVIEW 直接吃进char* 并把它放进一个 structure裡, 最后再来呼叫原本的DLL. 如果您有此DLL的原始程式码, 您也可以直接把struct型态改成char* 的型态.
注意: 在LabVIEW Example Finder 裡有一个很有用的范例档可以告诉您如何利用 Call Library Function Node 来应付不同型态的资料. 这个范例档叫做 Call DLL.vi. 当您遇到比较複杂的型态像是 array 或 struct 时, 您就可以来参考此范例. 您可以在LabVIEW Example Finder ( Help>>Find Examples) 裡选 Directory Structure. 在中间的资料夹清单内选择 dll>>data passing>>Call Native Code.llb. 您可在此找到 Call DLL.vi.
如果要在范例程式内观看某一个资料型态, 先在 Data Type 底下做选择. 接著按下 Open Example VI for Current Data 按键. 这时一个新的程式视窗就会打开并显示 Call Library Function Node 的应用范例.
如果使用的是 .NET assembly 的 DLL
1. 如要在 LabVIEW 下使用 .NET assembly, 请打开 .NET 的托盘 (程式区点右键在 Connectivity>>.NET裡) 并使用裡面的功能.
2. 首先使用 Constructor node 来开启您想用的 .NET assembly 功能.
3. 接著使用属性与呼叫节点 (Property / Invoke Node) 来控制或呼叫您功能的属性与动作. 您只需要把 Constructor node 的参考点连接到属性或呼叫节点即可.