1. 程式人生 > >C++ 非託管COM在C#下呼叫的問題

C++ 非託管COM在C#下呼叫的問題

最近打算使用新思的觸控板開發包實現一個手勢軟體

整個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#專案中新增引用,將這個動態連結庫引用進去,就可以直接使用類庫中的函式,實現自己想要的功能了。