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

如果包含自己寫的dll..在run時會出現錯誤

尚未結案
paf
初階會員


發表:36
回覆:70
積分:41
註冊:2002-12-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-07 19:09:47 IP:218.164.xxx.xxx 未訂閱
as title... 我的程式有用到自己的寫的DLL檔 我想把程式包成standalone的執行檔 但我已經把use dynamic RTL & build with runtime packages取消了 而且也在project manager中加入*.lib了 但在run時...卻會出現以下的錯誤訊息     但如果把use dynamic RTL打勾就沒有問題 請問這是什麼問題呢???謝謝 發表人 - paf 於 2004/04/07 19:11:14
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-08 09:28:06 IP:218.32.xxx.xxx 未訂閱
paf您好,    呵呵,我先不給你答案, 請你先看看"use dynamic RTL打勾與否"與"compiler產生檔大小"的關係。 ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖
paf
初階會員


發表:36
回覆:70
積分:41
註冊:2002-12-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-08 19:08:10 IP:218.165.xxx.xxx 未訂閱
引言: paf您好, 呵呵,我先不給你答案, 請你先看看"use dynamic RTL打勾與否"與"compiler產生檔大小"的關係。 < face="Verdana, Arial, Helvetica"> 我知道如果把use dynamic RTL打勾的話....執行檔的size會較大 但現在我想要的是...在一台沒有安裝BCB的電腦上跑我的程式 如果use dynamic RTL打勾的話 ->就必須把我自己寫的DLL跟BCB裡面的DLL放到另一台電腦中 但我只想要copy執行檔到另一台電腦..但bcb似乎無法把自己寫的DLL包進執行檔 請前輩指教...謝謝!!
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-08 20:10:19 IP:61.221.xxx.xxx 未訂閱
引言: 我知道如果把use dynamic RTL打勾的話....執行檔的size會較大 但現在我想要的是...在一台沒有安裝BCB的電腦上跑我的程式 如果use dynamic RTL打勾的話 ->就必須把我自己寫的DLL跟BCB裡面的DLL放到另一台電腦中 但我只想要copy執行檔到另一台電腦..但bcb似乎無法把自己寫的DLL包進執行檔 請前輩指教...謝謝!!
paf 你好: 你的觀念是錯誤的!!請參考以下的連結文章 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10003806&CC=223734"> -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
paf
初階會員


發表:36
回覆:70
積分:41
註冊:2002-12-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-08 21:10:07 IP:218.165.xxx.xxx 未訂閱
引言: paf 你好: 你的觀念是錯誤的!!請參考以下的連結文章 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10003806&CC=223734"> -- Enjoy Researching & Developing --
--------------------------- 我知道如果把use dynamic RTL打勾的話....執行檔的size會較(筆誤...應該是"小") --------------------------- 小弟看書寫的--如果把use dynamic RTL打勾的話..是把dll包進執行檔 我也認為是如此..... 但RaynorPao兄..就您的說法...好像dll是沒法包進執行檔 可否煩請更詳細的說明呢???謝謝!!!1 發表人 - paf 於 2004/04/08 21:17:06
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-12 09:42:39 IP:61.66.xxx.xxx 未訂閱
引言: --------------------------- 我知道如果把use dynamic RTL打勾的話....執行檔的size會較(筆誤...應該是"小") --------------------------- 小弟看書寫的--如果把use dynamic RTL打勾的話..是把dll包進執行檔 我也認為是如此..... 但RaynorPao兄..就您的說法...好像dll是沒法包進執行檔 可否煩請更詳細的說明呢???謝謝!!!1 發表人 - paf 於 2004/04/08 21:17:06
包子大的文章中已有提供兩個參考: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=22900 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27286 ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Programmers Guide http://anpino.begin.8d8d.com
paf
初階會員


發表:36
回覆:70
積分:41
註冊:2002-12-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-12 13:12:42 IP:218.164.xxx.xxx 未訂閱
引言: 包子大的文章中已有提供兩個參考: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=22900 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27286
感謝各位前輩的回答 但我們討論的..似乎有點離題了(我自己也離題了:P) 回歸到最原始的問題 我如果弄成獨立執行的執行檔,在別台沒安裝BCB的電腦一樣可以run 但當按某一個button,就會整個程式關閉 而我如果開啟BCB後,在BCB中run的話,在按下button後,就會出現以下的錯誤 而那button所做的事就是去call DLL檔中的funtion 而在程式的最前面我也有宣告 extern "C" __declspec(dllimport) void __stdcall Func(); 在DLL檔中也宣告成 extern "C" __declspec(dllexport) void __stdcall Func(); 為什麼還會出錯呢? 而如果我把use dynamic RTL打勾的話,就沒有這個問題了 覺得很神奇,有請各位前輩們指教....謝謝!!
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-13 12:00:12 IP:218.32.xxx.xxx 未訂閱
請問您的dll內是不是有用到bcb的元件? ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Programmers Guide http://anpino.begin.8d8d.com
paf
初階會員


發表:36
回覆:70
積分:41
註冊:2002-12-27

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-04-13 19:05:15 IP:218.164.xxx.xxx 未訂閱
引言: 請問您的dll內是不是有用到bcb的元件?
是沒用到 但有#include 請問在dll檔中有用到BCB的Component跟沒用到有什麼差別呢?
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-04-14 11:19:41 IP:218.32.xxx.xxx 未訂閱
引言: 是沒用到
但有#include 
請問在dll檔中有用到BCB的Component跟沒用到有什麼差別呢?
你有沒有發現build with runtime packages的內容裡都是BCB的Component? 如果不勾選, bcb編譯時將靜態鏈接所有用到的Library下的編輯框內容Disable,也就是說程式不需要執行runtime packages.如果勾選,在選項下的編輯框中可以增加或删除執行時載入的packages。 如果程式用到一個packages中的某個Component,且這個packages並未在編輯框packages列表中,即使Build with runtime packages是勾選的,程式執行時也不需要這個runtime packages。 再進一步,如果勾選build with runtime packages但packages列表編輯框是空的,其結果與沒勾選buider runtime packages是一樣的.對於第三方Component(包括自己編譯的Component)等,其設置也是一樣的。 針對您所提的: "我想把程式包成standalone的執行檔 但我已經把use dynamic RTL & build with runtime packages取消了", 我想您有必要了解use dynamic RTL & build with runtime packages這2個選項在幹麻。 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=48239 ================================================ 如果你看懂上面的說明的話。
如果沒用到BCB的Component,
那麼你應該明白dll程式碼中必須取消
#include ,
重新compiler。
再次debug。
    -------------------------------
數學系是內功很強(邏輯/分析)  資工系是招式很多(程式技巧) 就像令狐沖
        
paf
初階會員


發表:36
回覆:70
積分:41
註冊:2002-12-27

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-04-14 17:19:17 IP:218.164.xxx.xxx 未訂閱
引言: 如果你看懂上面的說明的話。
如果沒用到BCB的Component,
那麼你應該明白dll程式碼中必須取消
#include ,
重新compiler。
再次debug。

< face="Verdana, Arial, Helvetica">    我終於了解我的問題是出在哪裡了
以下這段內容摘自"深入C  Builder 探訪動態連結函式庫(Dynamic Linking Libraries,DLLs)"
http://www2.borland.com.tw/tw/td001018.html    按完OK或Finish後你會看到DLL Project與些許程式碼的產生,這段由C  Builder自動產生的程式碼中分兩大部分,第一部份是個很長一串的註解,最後就是所謂的DLL進入點。先來了解這一長串的註解,由方法一與方法二製造出來的DLL Project註解有點不相同,不過內容大致上差不多,內容如是說:如果我們的DLL內使用到了字串物件如:AnsiString,或是在輸出函式的參數或回傳值使用到長字串的話,就必須加入MEMMGR.LIB這個函式庫。另外,若我們在另一個模組(如DLL)中使用了例如new或GetMem等方法來配置記憶體,而在不同的模組(如EXE應用程式)中使用了這塊記憶體或呼叫FreeMem等方法來釋放記憶體,則MEMMGR.LIB也是必須被加入的。此外還有一個值得注意的,就是MEMMGR.LIB必須加在所有要用到函式庫的最前頭,以便在其他函式庫之前優先載入並接手相關的記憶體維護。同時要記住的是若你使用了MEMMGR.LIB這個函式庫,那麼當你移交DLL或是應用程式時,你必須連同BORLNDMM.DLL一併移交給使用者。不過在這段聲明的倒數第二段中有提到,若要避免額外的檔案付給使用者(越多的檔案對使用這來說是一種負 擔),你可以將有關字串的資料改由char *或是shortstring來傳送,這樣可以不動用到BORLNDMM.DLL與MEMMGR.LIB來作記憶體的配置。另外,聲明的最後一段中有提到,若你在Project\Options裡頭的Link一頁勾選了Use Dynamic RTL一項時,就不須額外手動將MEMMGR.LIB給加到Project裡頭了,因為C  Builder會自動幫你做這個動作     由於我有用到new & delete...因為沒把use dynamic RTL打勾的話
我的專案並不會自動把MEMMGR.LIB加到我的專案中    所以才導致在run時出錯......    謝謝二位前輩不吝指教小弟
讓我更了解use dynamic RTL & build with runtime packages    但由於anpino兄所回答的比較接近於小弟的需求
所以在此..就把分數給anpino兄了
對RaynorPao兄實在有點抱歉....        發表人 - paf 於 2004/04/14  17:24:18
        
系統時間:2024-05-05 18:40:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!