全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3211
推到 Plurk!
推到 Facebook!

_inline function中的runtime error

答題得分者是:dllee
Mmmoney
一般會員


發表:9
回覆:19
積分:5
註冊:2007-10-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-14 18:13:19 IP:220.130.xxx.xxx 訂閱
對不起我取這標題狠爛
但是小的經驗不足..無法判斷原因在哪

我現在的情況是在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(Data)[-1];
}

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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-11-14 18:52:18 IP:220.130.xxx.xxx 訂閱
我發現把"宣告c廠商的變數"拿掉後

就沒有runtime error的問題了

這是什麼情形呢
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-11-15 09:22:41 IP:220.134.xxx.xxx 訂閱
使用別人家的 DLL 最大的問題就是狀況不一,因為原廠無法「體會」您的使用狀況,只能按如果您只使用它的產品的狀況去設計,因此,當使用兩家以上 DLL 時,自己就要花時間去找出可共用並存的設定。
通常,會使內建的 VCL 或 DString.h 發生 Exception 時,99% 都是自己的程式使用 VCL 上有問題,這裡指的「自己的程式」包含您使用別家的 DLL。如果是花錢買的 DLL,就請原廠處理,這樣錢才不會白花


VMASK - ViewMove Automation Software KernelVMIO-Server/SECS/GEMdllee's blogdllee's StatPlus
------
http://www.ViewMove.com
Mmmoney
一般會員


發表:9
回覆:19
積分:5
註冊:2007-10-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-11-15 10:20:58 IP:220.130.xxx.xxx 訂閱
謝謝dllee大大
我會請廠商協助看看
可是大概沒辦法讓他們完全複製我的編譯環境>"<
那請問我現有的專案中

只加入宣告: c廠商類別 物件名稱;
會當掉在BCB的dstring.h

而如果拿掉這行: //c廠商類別 物件名稱;
整個專案就OK


請問這是c廠商的DLL中,字串的定義跟BCB衝到嗎?

Mmmoney
一般會員


發表:9
回覆:19
積分:5
註冊:2007-10-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-11-15 12:12:41 IP:220.130.xxx.xxx 訂閱
 我好像找到原因了,謝謝!

我把use dynamic URL的勾勾拿掉,不要使用use dynamic URL
就不會在dstring.h中錯誤了

我看到廠商的.h原始檔中使用了#include < vcl.h >
猜想應該是這造成我的runtime error吧..
請問大大我可以用什麼關鍵字去尋找文章來理解這其中的原因呢?
編輯記錄
Mmmoney 重新編輯於 2007-11-15 12:13:39, 註解 無‧
Mmmoney 重新編輯於 2007-11-15 12:15:18, 註解 無‧
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-11-15 13:02:48 IP:220.134.xxx.xxx 訂閱
如前述,使用別人的函式除非原廠很有經驗,考慮到使用者的可能狀況,不然,只能藉由回報狀況,來修正。
.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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-11-20 19:05:35 IP:220.130.xxx.xxx 訂閱
 您好,我再請問一個延伸性的問題
CONDITIONAL DEFINES下使用_DEBUG和 WIN32有何不同呢
哪種情況適用哪種參數?

我找過本站,GOOLE,和bcb help
都沒有滿意的答案
也許是我'搜尋的關鍵字不夠好..orz...
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-11-21 12:55:13 IP:220.134.xxx.xxx 訂閱
不太清楚您想要問的是什麼耶...
define _DEBUG WIN32 有什麼不同?!


VMASK - ViewMove Automation Software KernelVMIO-Server/SECS/GEMdllee's blogdllee's StatPlus
------
http://www.ViewMove.com
Mmmoney
一般會員


發表:9
回覆:19
積分:5
註冊:2007-10-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-11-21 17:30:50 IP:220.130.xxx.xxx 訂閱
您好:
因為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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-11-21 20:20:09 IP:59.105.xxx.xxx 訂閱
在 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 KernelVMIO-Server/SECS/GEMdllee's blogdllee's StatPlus
------
http://www.ViewMove.com
系統時間:2024-04-26 12:56:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!