DLL 問題 在 form 關閉和運作時出了問題 |
尚未結案
|
TheBloodKing
一般會員 發表:8 回覆:17 積分:10 註冊:2004-07-10 發送簡訊給我 |
[BCB] [轉貼] BCB編寫DLL終极手冊
我看了這片寫出來的 dll 方式,寫了dll, 但行時出錯了,但有時是,主程式結束時出錯 不知因為什麼 //dll文件 //--------------------------------------------------------------------------- #include #include #pragma hdrstop //--------------------------------------------------------------------------- USERES("Dll.res"); #include //導出函數 extern "C" __declspec(dllexport) __stdcall void ChangeLangMenu(TForm *InForm, TADOQuery *InQuery,int LangNum); //--------------------------------------------------------------------------- #pragma argsused int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) { return 1; } //--------------------------------------------------------------------------- void __stdcall ChangeLangMenu(TForm *InForm, TADOQuery *InQuery,int LangNum) { //轉語言 TMenuItem *mob = new TMenuItem(Application); InQuery->Close(); InQuery->SQL->Clear(); InQuery->SQL->Add("SELECT * FROM Lang"); InQuery->Open(); InQuery->First(); while (! InQuery->Eof) { mob = (TMenuItem *)InForm->FindComponent(InQuery->Fields->Fields[1]->AsString); mob->Caption=InQuery->Fields->Fields[LangNum]->AsString; InQuery->Next(); } } //--------------------------------------------------------------------------- //主程式 //.h文件 class TMainForm : public TForm { ..... private: // User declarations void (__stdcall *ChangeLangMenu)(TForm *InForm, TADOQuery *InQuery, int LangNum); ..... } //--------------------------------------------------------------------------- //.cpp文件 HINSTANCE DLLInst = NULL; void __fastcall TMainForm::LoadMenuItem() { DLLInst = LoadLibrary("ChangeLang.dll"); if (DLLInst) { ChangeLangMenu = (void (__stdcall*)(TForm *InForm, TADOQuery *InQuery, int LangNum)) GetProcAddress(DLLInst,"ChangeLangMenu"); if (ChangeLangMenu) { ChangeLangMenu(this, DataModule1->ADOQueryMenuItem, DataModule1->LangNum); } else { ShowMessage("Could not obtain function pointer"); } } else { ShowMessage("Could not load ChangeLang.dll"); } DLLInst = NULL; } |
TheBloodKing
一般會員 發表:8 回覆:17 積分:10 註冊:2004-07-10 發送簡訊給我 |
是不過我問得不好,還是問題太難,無人能解答
現在我把dll部分以收改了如下 不過還是有問題在loop 部分,是只要它行上數十次,便出現問題 不知還有無人知道問題所在,加以指點 //dll文件 //--------------------------------------------------------------------------- #include #include #pragma hdrstop //--------------------------------------------------------------------------- USERES("Dll.res"); #include //導出函數 extern "C" __declspec(dllexport) __stdcall void ChangeLangMenu(TForm *InForm, TADOQuery *InQuery,int LangNum); //--------------------------------------------------------------------------- #pragma argsused int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) { return 1; } //--------------------------------------------------------------------------- void __stdcall ChangeLangMenu(TForm *InForm, TADOQuery *InQuery,int LangNum) { //轉語言 TMenuItem *mob; String tt InQuery->Close(); InQuery->SQL->Clear(); InQuery->SQL->Add("SELECT * FROM Lang"); InQuery->Open(); InQuery->First(); while (! InQuery->Eof) { tt = InQuery->Fields->Fields[1]->AsString; //出現問題的停止位置 mob = (TMenuItem *)InForm->FindComponent(tt); mob->Caption=InQuery->Fields->Fields[LangNum]->AsString; InQuery->Next(); mob = NULL; Application->ProcessMessages(); } } //--------------------------------------------------------------------------- |
TheBloodKing
一般會員 發表:8 回覆:17 積分:10 註冊:2004-07-10 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |