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...