最近在趕國科會程式...由於之前用C語言寫,但是後來基於要自行開發介面與相對應之程式,所以改以C++的方式寫,也因為這樣,遇到不少問題,在此,僅記錄如標題之相關內容,供需要的人查詢或是留言討論。
「C++ call DLL file」在Google後有不少資料,方法很多,但我只列出對在這個Project有用到的方法;解法來自The CodeProject 這個網站裡的「How to load a dynamic link library (DLL) into a Microsoft Visual C++ 6.0 project」這篇文章,以下列出該方法。
typedef void (*EntryPointfuncPtr)(int argc, const char * argv)
HINSTANCE LoadME;
LoadMe = LoadLibrary("..\\enter a Path To Your Dll here\\LoadMe.dll");
if ( LoadME != 0 )
printf("LoadMe library loaded!\n");
else
printf("LoadMe library failed to load!\n");
EntryPointfuncPtr LibMainEntryPoint;
LibMainEntryPoint = (EntryPointfuncPtr)GetProcAddress(LoadMe,"entryPoint");
看一看,其實不難,照本宣科改一些變數名稱就可以得到自己要的程式....
typedef void (*LoadDLLFunc1)();
typedef void (*LoadDLLFunc2)();
static HINSTANCE hInst;
static HINSTANCE hInst2;
void LoadDllFile(void) {
hInst = LoadLibrary(L"xxx.dll");
hInst2 = LoadLibrary(L"xxx.dll");
LoadFun();
}//end LoadDllFile(void)
void FreeDllFile(void) {
FreeLibrary(hInst);
FreeLibrary(hInst2);
}//end FreeDllFile(void)
void LoadFun(void) {
DllLock = 1;
while(1) {
LoadDLLFunc1 func1;
func1 = (LoadDLLFunc1)GetProcAddress( hInst, "MyFunc1" );
func1();
if( _access( "SomeFileName",0 ) != -1 ) {
LoadDLLFunc2 func2;
func2 = (LoadDLLFunc2)GetProcAddress( hInst2, "MyFunc2" );
func2();
break;
}//end if
}//end while
DllLock = 0;
FreeDllFile();
}//end LoadFun(void)
這是部分程式,使用了LoadDLL的方法以及使用完FreeDLL的方法,記得!!DLL用完記得Free掉,不然真的會Debug不完XD
- Dec 07 Mon 2009 22:53
C++ 呼叫DLL檔
close
全站熱搜
留言列表
禁止留言