Dll中有Form使用到TImage,但是呼叫Dll時卻無法正確載入圖片jpg。 |
尚未結案
|
nady
一般會員 發表:8 回覆:6 積分:2 註冊:2002-11-12 發送簡訊給我 |
前輩們
小弟在寫一個程式(A),會用到我自己寫的Dll(B)。
但是這個Dll會顯示一個Form裡頭有兩張圖,一張是bmp另一張是jpg,分別用TImage載入。 程式(A)本身也有兩張圖,一張是bmp另一張也是jpg,同樣也是用TImage載入。再去呼叫Dll(B)顯示Form和圖片,結果發現程式(A)的兩張圖,會少了一張jpg的。
錯誤是"Unknown picture file extension (.jpg)."
但是Dll(B)的兩張圖都會正確顯示,且程式(A)的bmp也可以正確顯示。那為什麼唯獨程式(A)的jpg不能載入呢?? 我自己有做一些測試
1.如果程式(A)單獨運行(拿掉Dll(B)的Lib和Dll(B)的函式,就是跟Dll(B)完全無關)
結果:程式(A)的兩張圖都很正常的顯示。
2.如果程式(A)和Dll(B)的Lib一起link,但是不呼叫Dll(B)的函式)
結果:程式(A)的jpg那張圖就會無法顯示。
3.如果程式(A)和Dll(B)的Lib一起link,而且也呼叫Dll(B)的函式)
結果:程式(A)的jpg那張圖就會無法顯示。 所以只要程式(A)將Dll(B)的Lib加進專案,TImage 就會無法顯示jpg,但是可以顯示bmp。 我是使用BCB5.0。 請前輩們幫我測試看看吧...
因為我不知道怎麼上傳程式,而且像我這樣的程式碼很短,所以我就沒有上傳程式碼了。還請前輩幫忙。 最後我有試出來可以用的方法,但是很不可思議,而且我也不懂,所以不足採信。
結果:只有將程式(A)和Dll(B)在編譯的時候,都要將"Build with Runtime Package"打勾,才可以讓程式(A)和Dll(B)的4張圖片正常顯示。 可是據我所知的"Build with Runtime Package"並無法解釋這個問題,而且這樣對我的程式以後要散佈到別的電腦還是相當不方便。
還請前輩們指導。 謝謝 sincerely
Nady
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
nady
一般會員 發表:8 回覆:6 積分:2 註冊:2002-11-12 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
nady 您好: 插個花!
曾經有這樣的經驗:
利用Image將.jpg檔讀入,但一旦動到Image->Picture->Bitmap->Pixels[x][y],該圖形就不見了。
原因是要將Image中的圖形轉成bitmap格式,才能透過Pixels[x][y]存取點的資料。所以會不會是您在dll中有動到Pixel?
如果真如上述所說的那樣,底下程式碼可將Image中的jpg轉成bitmap,提供參考。
<>< class="code">
Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
pBitmap->Width = Image1->Picture->Width;
pBitmap->Height= Image1->Picture->Height;
pBitmap->Canvas->Draw(0,0,Image1->Picture->Graphic);
Image1->Picture->Assign(pBitmap);
delete pBitmap; RichTop 敬上 =====*****
把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題!
=====##### 發表人 - richtop 於 2004/08/04 18:29:02
|
nady
一般會員 發表:8 回覆:6 積分:2 註冊:2002-11-12 發送簡訊給我 |
哈囉pwipwi,richtop兩位前輩你們好: 非常感謝兩位抽空幫小弟想辦法解決這個怪問題。
目前小弟一共找到兩種解決辦法,但是我都不了解為什麼這樣做可以解決問題。
方法一:就是一定要在編譯Dll和編譯exe時,Build with Runtime Package都要勾選。(就我所知這樣的編譯設定,好像是指編譯的時候BCB並不會將指定的package例如:vcl50.bpl包裝到Dll和exe裡面,所以更是不懂為什麼這樣設定反而才可以正確執行)
方法二:在編譯Dll和編譯exe時,Build with Runtime Package可以不要勾選。但是exe要使用動態連接的方式載入Dll。不可以像方法一一樣使用靜態連接的方式載入Dll。
以上是我測試過的結果。不知道板上的各位前輩是否也有發生像我這樣的問題。
基於求知的慾望,懇請前輩們指點。
謝謝
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |