C builder 呼叫VC 封裝的dll元件

2021-06-01 18:57:50 字數 1592 閱讀 6415

c++builder呼叫自己寫的元件或者vc寫的dll,還是很方便的,但是過程中會有很多細節問題,

我很負責人的想罵網上那些不不負責任,寫出方法,直接貼上別人方法的,不整理的,亂講的,**都有問題的童鞋們。你們真是作風不嚴謹,寫**不認真。。

給別人製造難度就是給自己製造難度。。

1.。。c++builder靜態呼叫vc的dll方法

1.首先就是對dll的轉換,c++builder 6.0,有這個工具。。

你只需要     執行--》cmd---》implib    ***.lib   ***.dll        ,dos視窗,在你的預設目錄下面放上你的dll,     implib    ***.lib   ***.dll 轉化成功後就會在相同目錄下生成乙個lib庫

轉換成c++builder可用的lib庫, 首先要保證你的lib庫寫的是沒有問題的,不然就算你能轉換通過,你還是會遇到很多錯誤導致你用不了

2,呼叫的過程中,你要寫乙個標頭檔案,就是定義你的輸出函式。。

#include

#include "aitalksample.h"

#include

#include

#ifdef __cplusplus

extern "c"   /* end of the 'extern "c"' block */

#endif

3.呼叫時這樣用。 就可以直接用你庫裡面的函式了。。

封裝輸出函式的時候最好這樣寫。

extern  "c"  _declsped(dllexport) int   result(char *p);           //extern  "c" 這個是保證你的輸出函式不會亂碼的,在使用前你最好用工具查一下你的輸出函式名。。(exescope.exe這個工具就可以);        

#include "***xx.h"

#pragma comment(lib,"***x.lib")   //你的庫的名字。。   

void __fastcall tform1::formoncreate(tobject *sender)

2,動態呼叫的方法,

有可能你的庫在c#裡面可以用,但是在c++builder裡面不能用,這就說明你的庫是沒問題的,那就動態呼叫。。

2 .1現在標頭檔案裡面定義乙個輸出函式指標型別。。

typedef int  __stdcall (*readt)(char *);         //int是你的輸出函式的返回型別,,readtext1是定義的函式指標型別,(char *)是你的引數型別,

//現獲取鏈結庫入口位址

hinstance hins;

readt  lpfnregister;           //定義readt型別的指標      在上面已經定義的

hins=loadlibrary("asound.dll");

//這裡代替了你的函式readtext(char*p);//你的庫裡面的函式原型

freelibrary(hins);}}

//這樣就沒用問題了,兩種呼叫方法。。

我用c++封裝的兩個元件  朗讀元件asound.dll 和識別元件 aitalk.dll  是c++ builder是這樣呼叫的,沒用問題。。

C Builder及VC的DLL相互呼叫解決方案

由於ms和borland codegear 兩家的編輯器實現細節不同,造成了它們生成的dll不能相互通用,因此給實際帶來了很多的麻煩。下面來說一說如何解決這個問題。1 用extern c 修飾vc匯出的dll函式。如 extern c declspec dllexport int afunc int...

C Builder建立及呼叫DLL

動態鏈結庫 dll 是windows程式設計常遇到的程式設計方法,下面我就介紹一下在 bcb c builder下簡稱bcb 中如何建立使用dll和一些技巧。一 建立 使用bcb file new建立乙個新的dll工程,並儲存好檔案bcb,生成乙個dll 的程式框架。1 dllentrypoint函...

封裝的VC函式

封裝遠端注入的函式 引數 1.程序 id 引數 2.被注入函式指標 函式名 引數 3.引數 引數 4.引數長度 bool injectremotefunc dword dwprocid,lpvoid mfunc,lpvoid premoteparam,dwordparamsize hthread c...