Labwindows/CVI程序調用C#生成的Dll文件

最近需要在一個CVI程序里加入語音播報功能,由於CVI是基於C語言的編程,實現播報功能無從下手,而C#封裝了庫函數,可以直接調用,實現起來方便很多。下面重點記錄一下CVI程序調用C#生成的Dll文件的過程。

首先,在vs中建立一個類庫,編寫含有語音播報功能的方法,並將其生成Dll文件。

語音播報功能編寫見:http://www.cnblogs.com/leep2007/archive/2012/02/27/2370576.html

然後,由於CVI程序無法直接調用C#生成的Dll文件,需要先將Dll文件通過CVI工具選項卡中的“Create.NET Controller”,生成一個調用.NET彙編代碼的包裝器(wrapper),該包裝器包含對應的儀器驅動(*.fp)、源文件(*.c)和頭文件(*.h)。包裝器的生成具體步驟如下:

1.      選擇tools菜單欄下的“Create .NET Controller”菜單;

2.      在彈出的對話框中勾選Specify Assembly by Path,選擇需要調用的Dll文件,以及生成的包裝器所在路徑和名稱,如圖1所示。

3.      點擊OK,即在選擇路徑生成包裝器,同時.fp文件已添加至工程中。

                                                  

圖1 Create.NET Controller 對話框

 

接下來是調用.fp中的函數來實現語音播報功能。步驟如下:

1.      聲明[Dll名稱]_[類名稱]類型的句柄;

2.      調用CDotNetRegisterAssemblyPath函數註冊.NET的Dll,函數的第一個參數爲Dll名稱(字符串):其值爲生成的*.C文件中指針變量__assemblyName 的值,第二個參數爲.DLL文件存放的絕對路徑,形式爲”D:\\NI\\DLL\\sound.dll”,詳細解釋見函數定義。

3.      調用【Initialize_[DLL名稱]】函數初始化;

4.      調用【[DLL名稱]_[類名稱]__create】函數,實例化類;

5.      調用【[DLL名稱]_[類名稱]_[函數名]】相應的函數,實現播報功能;

6.      調用CDotNetDiscardHandle函數,釋放DLL實例句柄;

7.      調用CDotNetFreeMemory釋放內存;

調用Close_[Dll名稱]關閉DLL。


注:在生成語音dll文件時,是基於.net  framework 4.5 ,所以在.net framework 4.0的平臺上使用時,會報-6579錯誤,這時安裝.net framework 4.5插件即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章