C++ 非託管COM在C#下呼叫的問題
阿新 • • 發佈:2019-02-06
最近打算使用新思的觸控板開發包實現一個手勢軟體
整個SDK主要由以下幾部分組成:
說明文件
樣例程式碼
.dll動態連結庫檔案
.lib庫檔案
.h標頭檔案
新思的SDK是已經有超過10年沒有更新了,整個SDK只提供了C++和VB的介面
而我的軟體使用的是C#編寫的,這就涉及到一個問題,我怎樣才能實現在C#中呼叫SDK呢?
第1種解決辦法:
由於SDK提供了dll檔案,我們可以直接使用DllImport將dll檔案匯入,然後再自己編寫一個需要使用的函式介面
但這種辦法有相當多的缺陷
一是每個介面函式都要自己寫介面,相當繁瑣
二是如果函式引數中涉及到指標等C++特有的變數型別時,要進行型別轉換,而如果引數中使用了結構體和類的話,更是要自己重新編寫結構體和類
總之,這種方法使用起來相當不方便,所以我放棄了
第2種解決辦法:
使用managed C++
通過google和詢問大牛,瞭解到託管程式碼這個概念(也就是managed C++)
託管程式碼是微軟提供給我們,讓我們能夠在使用C#等開發語言時,能夠呼叫原來C++程式碼的方法。
整個託管程式碼的框架是這樣的:
託管C++負責呼叫原始的C++函式,而C#能夠呼叫託管C++生成的dll
這樣,託管C++成功的起到了一個橋樑的作用,把natvive C++和C#聯絡起來了。
大致操作過程如下:
新建一個C++ CLR類庫工程
在這個類庫中通過將原始的lib和標頭檔案靜態連結進來
再將自己想要實現的功能在這個類庫中實現
生成dll動態連結庫
最後在C#專案中新增引用,將這個動態連結庫引用進去,就可以直接使用類庫中的函式,實現自己想要的功能了。