採用Dll 方式取得 *.INI內不同 Section 的字串 時有 Privileged instruction 錯誤?請高手指教問題是出在哪?? |
尚未結案
|
g9412747
初階會員 發表:3 回覆:28 積分:36 註冊:2009-02-25 發送簡訊給我 |
說明: 兩個Function , 一個用來讀取INI中所設定的 資料庫FileName ,另一個用來讀取 ADO元件與資料庫連接的 ConnectingString
若不將這兩個Dunction包成Dll檔 , 直接以函數呼叫使用 ,則程式一切執行正常 但是若包在Dll裡 , 透過 Load Dll 後, 再使用GetProcAddress , 則第一次取得的Func1 可以正常(無論是要先讀取 資料庫FileName 還是ConnectingString) 接著再使用 GetProcAddress 取得 Func2 想要來讀取後來的 資料庫FileName 還是ConnectingString , 都會出現 Privileged instruction 錯誤 爬文很久 , 一直被這問題困擾 , 僅管說可採用別種寫法就不會這樣了 , 但還是很執著的想瞭解為什麼會有這種情況??? 麻煩各位大大幫幫忙 , 告訴我為什麼會這樣!! 網路上大多的回答我都試過了, 如 , Dll中return改用char , 不要用AnsiString , 測過都會發生Privileged instruction 錯誤 程式碼如下: [DLL內] [code cpp] String Str2; String Str3; extern "C" String __declspec(dllexport) __stdcall LoadINIDBName(String initemp) { TMemIniFile *iniSpec = new TMemIniFile(ChangeFileExt(AnsiString(INIStr), ".INI" )); Str2 = iniSpec->ReadString("New Database","FileName",-1); delete iniSpec; return Str2; } extern "C" String __declspec(dllexport) __stdcall LoadODBCConnect(String initemp) { TMemIniFile *iniSpec = new TMemIniFile(ChangeFileExt(AnsiString(INIStr), ".INI" )); Str3 = iniSpec->ReadString("ConnectStr","ConnectingString",-1); delete iniSpec; return Str3; }[/code] [主程式內] Button1 Click功能內 [code cpp] String ApName = Application->ExeName; //主程式路徑 (for 取得INI檔) String ConnectionString; //連接字串 String ODBCConnectStr; String MDBFileName; String INIStr1; { typedef String (*LOADINIDBNAME)(String); HINSTANCE hDLL = NULL; LOADINIDBNAME LoadINI,LoadODBC; //載入DLL檔 hDLL = LoadLibrary("LoadINIDB.dll"); if(hDLL == NULL) { MessageBox(hWnd,"LoadINIDB.dll 檔案載入失敗!","訊息",MB_ICONERROR); return; } LoadINI = (LOADINIDBNAME)GetProcAddress(hDLL,"LoadINIDBName"); MDBFileName = LoadINI(ApName); //取得 MDB 檔名稱(正常取得ini中 資料庫的FileName)(奇怪處:換成Dll內另一個 LoadODBCConnect 函數先做 也會正常) LoadODBC = (LOADODBCCONNECT)GetProcAddress(hDLL,"LoadODBCConnect"); ODBCConnectStr = LoadODBC(ApName);//取得連接字串 ==>(這一個一定會出現 Privileged instruction 錯誤 , 不管是 LoadINIDBName(..) 或是 LoadODBCConnect()後做 ) FreeLibrary(hDLL); }[/code] 請幫忙解決我的疑惑 , 謝謝 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |