_inline function中的runtime error |
答題得分者是:dllee
|
Mmmoney
一般會員 ![]() ![]() 發表:9 回覆:19 積分:5 註冊:2007-10-12 發送簡訊給我 |
對不起我取這標題狠爛
但是小的經驗不足..無法判斷原因在哪 我現在的情況是在MDI中掛上不同廠商(簡稱A.B)的dll 原本都無問題 但我掛上C廠商的DLL和include後 我的MDI程式在關閉時, 會出現"runtime error 204 at 40002FFC" 在MAIN form 的close中debug..發現程式是掛在dstring.h中的這行 __DSTRING_INLINE const AnsiString::StrRec &AnsiString::GetRec() const { return reinterpret_cast } debug過程我附在圖檔中 請問這個大概要怎麼解決? 在這個專案中我有為了C廠商的DLL去拿掉B廠商的DLL,DLL指令,INCLUDE 因為也是有定義上相衝的問題 但應該是有清乾淨..不然我想COMPLIER時會警告吧 然後新開一個SDI和MDI去測試C廠商的東西 發現C廠商的include會和BCB的winnt.h等相衝 因此conditional defines要改成WIN32才能解決 執行這兩個SDI和MDI後關閉也沒有問題. 請問我要如何解決我專案這個ERROR 訊息呢? 請問我說的夠詳細嗎 |
Mmmoney
一般會員 ![]() ![]() 發表:9 回覆:19 積分:5 註冊:2007-10-12 發送簡訊給我 |
|
dllee
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
使用別人家的 DLL 最大的問題就是狀況不一,因為原廠無法「體會」您的使用狀況,只能按如果您只使用它的產品的狀況去設計,因此,當使用兩家以上 DLL 時,自己就要花時間去找出可共用並存的設定。
通常,會使內建的 VCL 或 DString.h 發生 Exception 時,99% 都是自己的程式使用 VCL 上有問題,這裡指的「自己的程式」包含您使用別家的 DLL。如果是花錢買的 DLL,就請原廠處理,這樣錢才不會白花 ![]() ■ VMASK - ViewMove Automation Software Kernel ■ VMIO-Server/SECS/GEM ■ dllee's blog ■ dllee's StatPlus ■
------
http://www.ViewMove.com |
Mmmoney
一般會員 ![]() ![]() 發表:9 回覆:19 積分:5 註冊:2007-10-12 發送簡訊給我 |
|
Mmmoney
一般會員 ![]() ![]() 發表:9 回覆:19 積分:5 註冊:2007-10-12 發送簡訊給我 |
我好像找到原因了,謝謝!
我把use dynamic URL的勾勾拿掉,不要使用use dynamic URL 就不會在dstring.h中錯誤了 我看到廠商的.h原始檔中使用了#include < vcl.h > 猜想應該是這造成我的runtime error吧.. 請問大大我可以用什麼關鍵字去尋找文章來理解這其中的原因呢? |
dllee
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
如前述,使用別人的函式除非原廠很有經驗,考慮到使用者的可能狀況,不然,只能藉由回報狀況,來修正。
.h 的 include 算是最大的問題,寫得不好的 .h 檔,不要說用別人的,有時自己都會因多個 Unit include 來 include 去而發生問題。這個部分會是比較傷腦筋的,因為使用者不可能把所有用到的 .h 都給原廠去除了,因為可能用了別家,而別家也是要安裝付費才能用的。 至於 Use dynamic RTL 如果有的有勾,有的沒勾,會因為引用的 dll 不同而發生問題,如果還有 BCB 版本的不同的話,那問題更大。 以下取自 BCB5 線上說明: Use dynamic RTL means to use the RTL DLL, which is the DLL version of the Runtime Library in your application (or dll/package/ActiveX control). If you enable the option, the RTL code isn't linked into your application, resulting in a smaller image, but you must distribute the RTL DLL with your application. This option defines the conditional define _RTLDLL.
------
http://www.ViewMove.com |
Mmmoney
一般會員 ![]() ![]() 發表:9 回覆:19 積分:5 註冊:2007-10-12 發送簡訊給我 |
|
dllee
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
不太清楚您想要問的是什麼耶...
define _DEBUG WIN32 有什麼不同?! ■ VMASK - ViewMove Automation Software Kernel ■ VMIO-Server/SECS/GEM ■ dllee's blog ■ dllee's StatPlus ■
------
http://www.ViewMove.com |
Mmmoney
一般會員 ![]() ![]() 發表:9 回覆:19 積分:5 註冊:2007-10-12 發送簡訊給我 |
您好:
因為bcb conditional defines原本預設是_DEBUG 但我的程式使用了網路上open source的h檔和cpp檔 compiler會出現重複定義的警告! 但如果conditional defines改成WIN32 程式就可以RUN了 我想請問這是什麼原因呢 我看過bcb的HELP檔後,只知道 conditional defines是與precomplier有關. 找不到更詳盡的解釋.
編輯記錄
Mmmoney 重新編輯於 2007-11-21 17:32:14, 註解 無‧
|
dllee
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
在 Project Options 中的 conditional defines 只是設定 define 的字串,
而這個 conditional defines 是套用到所有 compile 的檔案。 例如,你的專案有 A.cpp, B.cpp, C.cpp 且 conditional defines 設定 _DEBUG 則等於在 A.cpp, B.cpp, C.cpp 的第一行加上 #define _DEBUG 如果您使用 _DEBUG (這應該是專案設定 DEBUG, 設定為 Release 就不會有了) 不行 compile,也不必改成 WIN32 這個 conditional defines 是給 compiler 的 -D 參數用的,您可以參考 bcc32 的線上說明。 ■ VMASK - ViewMove Automation Software Kernel ■ VMIO-Server/SECS/GEM ■ dllee's blog ■ dllee's StatPlus ■
------
http://www.ViewMove.com |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |