線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1221
推到 Plurk!
推到 Facebook!

A.dll 的迴圈內呼叫 B.dll 問題

缺席
ac12zz
一般會員


發表:2
回覆:2
積分:0
註冊:2006-07-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-11-10 14:19:57 IP:220.130.xxx.xxx 訂閱
各位前輩好
小弟練習DLL實作,主頁面下放置了一個Button
按下去後會呼叫 sumloop.dll
在sumloop.dll中有個迴圈,會呼叫double.dll
而double.dll只是很簡單的把傳入值乘以2後便回傳
但小弟不解的是,為何sumloop迴圈一次兩次可以,但執行到多次後,便出現了Access violation錯誤如下
( PS. 已經在迴圈中加入暫停時間讓 loadlibrary 與 freelibrary 有緩衝時間 )


以下是我的 sumloop.dll 程式碼
[Code]
int __stdcall sumloop( int loopcount ,TLabel *lbC, int *transVar)
{
if( lbC->Visible == true ) return -1;

int sum = 0;
int i = 1;
//加總
for ( i=1 ; i<=loopcount ; i )
{
sum = i;
}
try
{
//在迴圈中呼叫double.dll
for( i=0 ; i<10 ; i )
{
HINSTANCE dll2temp = LoadLibrary( "doubleDll.dll" );
int (*dll2)( int);
( FARPROC& )dll2 = GetProcAddress( dll2temp, "doubleDll" );
sum = dll2( sum );
Sleep( 50 );
FreeLibrary( dll2temp );
Sleep( 300 );
}
//奇怪的是,只單獨執行一次就不會發生access violation的情況發生
}
catch(...)
{
Application->MessageBoxA( "Dll2 failed", "Warning", MB_OK );
}

return sum ;

}
[/Code]
以下是我的doubleDll.dll 程式碼
[Code]
int __stdcall doubleDll( int sum1 )
{
sum1 *= 2;
return sum1;
}
[/Code]
還請各位前輩能給予指點,感恩
coldwind1234
一般會員


發表:3
回覆:25
積分:20
註冊:2006-08-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-11-13 22:05:12 IP:220.134.xxx.xxx 未訂閱
FreeLibrary( dll2temp );

上面那行試試改為
FreeLibrary(dll2);

應該可以
不行再講,我幫你試= =
ac12zz
一般會員


發表:2
回覆:2
積分:0
註冊:2006-07-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-11-14 09:31:39 IP:220.130.xxx.xxx 訂閱
 感謝您出手相助
小弟嘗試過,但是錯誤訊息仍然一樣
我再試試( 雖然一直想不出其他"步數" )
也麻煩您及其他高手不吝給予嘗試的方向
感恩
系統時間:2024-05-10 17:05:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!