使用靜態載入(Implicit Linking) |
答題得分者是:taishyang
|
ReLife
一般會員 發表:8 回覆:7 積分:3 註冊:2004-12-07 發送簡訊給我 |
小弟嘗試使用靜態載入的方法,但是編譯無法成功,苦惱
請各位前輩幫忙!! ShowMsg.cpp [code cpp] #include #pragma hdrstop #pragma argsused USEFILE ("ShowMsg.h"); BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved) { return 1; } int ShowMsg(char* pText,HWND hWnd) { return MessageBox(hWnd,pText,"Information",MB_OK); } [/code] ShowMsg.h [code cpp] #ifndef ShowMsgH #define ShowMsgH #ifdef__DLL__ #define DLLAPI extern "C" __declspec(dllexport) #else #define DLLAPI extern "C" __declspec(dllimport) #endif DLLAPI int ShowMsg(char* pText,HWND hWnd); #endif [/code] 另外..編譯成功後該怎麼載入呢? 感謝!! 附件是整個project所包含的檔案(_ _) |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
假如你是用BCB的話
//ShowMsg.h file #ifndef ShowMsgH #define ShowMsgH #ifdef __DLL__ #define DLLAPI extern "C" __declspec(dllexport) #else #define DLLAPI extern "C" __declspec(dllimport) #endif DLLAPI int ShowMsg(char* pText,HWND hWnd); #endif //ShowMsg.cpp file #include < windows.h > #pragma hdrstop #pragma argsused #include "ShowMsg.h" BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved) { return 1; } int ShowMsg(char* pText,HWND hWnd) { return MessageBox(hWnd,pText,"Information",MB_OK); } 另外開啟一專案來測試 1. 把lib加到專案中 [Projett]->[Add to project] 2. 測試的code如下 #include "ShowMsg.h" //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { ShowMsg("test", NULL); } //---------------------------------------------------------------------------
編輯記錄
taishyang 重新編輯於 2008-11-11 18:21:32, 註解 無‧
|
ReLife
一般會員 發表:8 回覆:7 積分:3 註冊:2004-12-07 發送簡訊給我 |
thanks taishyang大大
編譯(CTRL F9)ShowMsg.bpr後將ShowMsg.lib ShowMsg.h放在新的project中還是無法執行哩!! 錯誤訊息如下:這個應用程式無法啟動,因為找不到SHOWMSG.DLL,重新安裝應用程式可能可以解決這個問題 將ShowMsg.dll放進資料夾後是OK..but似乎已經不是靜態載入了(汗) 是不是哪個步湊錯誤了呢? PS:下面兩個選項都disable掉了 Project->Options->Packages->Runtime packages->Build with runtime packages Project->Options->Linker->Linking->Use dynamic RTL |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
2007
中階會員 發表:54 回覆:90 積分:98 註冊:2008-08-12 發送簡訊給我 |
http://delphi.ktop.com.tw/download.php?download=upload/491b980d2bb65_Implicit_Linking.rar 不知這麼寫對不對耶!! ,但至少應該可以用吧!!! ===================引 用 ReLife 文 章=================== 小弟嘗試使用靜態載入的方法,但是編譯無法成功,苦惱 請各位前輩幫忙!! ShowMsg.cpp [code cpp] #include #pragma hdrstop #pragma argsused USEFILE ("ShowMsg.h"); BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved) { return 1; } int ShowMsg(char* pText,HWND hWnd) { return MessageBox(hWnd,pText,"Information",MB_OK); } [/code] ShowMsg.h [code cpp] #ifndef ShowMsgH #define ShowMsgH #ifdef__DLL__ #define DLLAPI extern "C" __declspec(dllexport) #else #define DLLAPI extern "C" __declspec(dllimport) #endif DLLAPI int ShowMsg(char* pText,HWND hWnd); #endif [/code] 另外..編譯成功後該怎麼載入呢? 感謝!! 附件是整個project所包含的檔案(_ _) |
ReLife
一般會員 發表:8 回覆:7 積分:3 註冊:2004-12-07 發送簡訊給我 |
sor...好多天都沒上論壇
回正題............. 搞混了...>"< 目前ShowMsg.lib ShowMsg.h放在測試程式資料夾底下並且 1. 把lib加到專案中 [Projett]->[Add to project] 2. 測試的code如下 #include "ShowMsg.h" //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { ShowMsg("test", NULL); } //--------------------------------------------------------------------------- 但無法show出預期的結果,反而跑出這樣的訊息___ 錯誤訊息如下:這個應用程式無法啟動,因為找不到SHOWMSG.DLL,重新安裝應用程式可能可以解決這個問題 小弟所知的情況是 引用DLL ==> 動態載入 引用*.H *.LIB ==> 靜態載入 ===================引 用 taishyang 文 章=================== 以Win32 API LoadLibrary來載入DLL才是動態載入 |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
ReLife
一般會員 發表:8 回覆:7 積分:3 註冊:2004-12-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |