C 呼叫C 的動態庫dll

2022-10-11 17:57:10 字數 1540 閱讀 8561

以往我們經常是需要使用c#來呼叫c++的dll,這通過pinvoke就能實現。現在在實際的專案過程中,有時會遇到在c++的專案中呼叫某個c#的dll來完成特定的某個功能,我們都知道,native c++是沒辦法直接呼叫.net平台的dll的。那有沒有辦法來做到這一點了?答案是肯定的。

雖然,native c++是呼叫不了c#的dll的,但是managed c++(c++/cli)可以呼叫c#的dll,所以,可以使用c++/cli作為橋梁來將 native c++ 和 c#連線起來。

(1)新建乙個c++/cli的庫(比如名稱為omcswrap),新增引用並呼叫omcs.dll,使用managed c++語法呼叫omcs.dll中的元件,並暴露出標準的c/c++介面。

(2)編譯c++/cli庫得到 omcswrap.dll 和 omcswrap.lib。該庫的介面是符合c++規範的。

(3)在native c++專案(如qt)中,鏈結 omcswrap.dll、omcswrap.lib即可。

using

namespace

system;

using

namespace

system::drawing;

using

namespace

omcs::passive;

using

namespace

omcs::passive::video;

refclass

tester

void

start()

//攝像頭影象資料

void onnewframereceived(array

char, 1>^rgb24)

//連線攝像頭的結果

void

onconnectended(omcs::passive::connectresult result)

else

}void

stop()

this->dynamiccameraconnector =nullptr;

} }};

(2)這裡是以攝像頭為例,桌面也是完全一樣的模式,使用dynamicdesktopconnector。

這裡只是簡單的示意一下c++/cli呼叫omcs的方式,至於封裝乙個給native c++來呼叫c++/cli庫,這個庫要提供哪些api,則取決於具體的專案需求,這裡就不舉例了。

1. c++/cli呼叫omcs demo:cppcli-callomcs-demo.rar

2. demo 服務端+c#客戶端:omcs.demos.******st.rar

最後提一下,還有一種 native c++ 呼叫c#的dll的方式,是使用com元件。

這種方式是在c#的dll外再封裝一層,將其介面全部轉換成com介面,如此,標準的com元件就可以被native c++呼叫了。

com元件這種做法已經很古老,而且相當繁瑣,所以不是迫不得已,一般不會採用這種方式。

C 動態呼叫DLL

在工作中經常需要寫dll並呼叫。本文寫出一種最簡單實用的dll動態呼叫的demo。口訣 1個檔案2行單詞3步走 dll1個檔案2個單詞 1個檔案.def,2個單詞 export test函式名 exe3步走。申明函式,載入庫,指向函式 1 新建乙個空的exe專案 2 新建乙個空的dll專案,並新增同...

C 呼叫動態DLL

c 呼叫動態鏈結庫方法 dllimport mydll.dll public static extern int add int a,int b private void btn add click object sender,eventargs e 如果需要呼叫同乙個dll檔案中的兩個不同函式,則...

C 動態呼叫DLL

本來是想實現控制台程式執行時自動全屏,但是只找到 vc下的實現方法 其中要使用兩個未公開的 win32 api 函式來訪問控制台視窗,這就需要使用 動態呼叫的方法,動態呼叫中使用的 windows api 函式主要有三個,即 loadlibrary getprocaddress 和freelibra...