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

在 DLL 中定義 TRect

尚未結案
alarddin
一般會員


發表:3
回覆:7
積分:2
註冊:2002-07-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-15 15:13:41 IP:61.221.xxx.xxx 未訂閱
請問,我現在將 LED 的程式由.pas轉為 DLL。 然後給 Visual Basic 去呼叫 但是在 DLL 中,我每次設定 TRect 為 128x16 但是每次的值都會變成 32x16, 怎麼會這樣,是 DLL 無法定義 TRect 嗎? 或是在 DLL 中最大只有 32x16。 我該如何做呢? Code: var r:TRect; begin r := Rect(0,0,128,16); -->不論給什麼值,r 永遠都是 32x16 end; 發表人 - alarddin 於 2003/09/15 15:21:04
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-15 15:26:04 IP:147.8.xxx.xxx 未訂閱
How do you test r? and any VB codes in calling the dll?
alarddin
一般會員


發表:3
回覆:7
積分:2
註冊:2002-07-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-16 11:06:59 IP:61.221.xxx.xxx 未訂閱
我是在 Run-Time 的時候,直接用滑鼠去看那個 r 的值。 至於 VB 的 code ,因為這個問題還沒處理好, 所以我現在都只用 Delphi 去 Call。
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-16 11:22:47 IP:147.8.xxx.xxx 未訂閱
引言: 我是在 Run-Time 的時候,直接用滑鼠去看那個 r 的值。 至於 VB 的 code ,因為這個問題還沒處理好, 所以我現在都只用 Delphi 去 Call。
Don't trust the debugger so much... try ShowMessage or similar function to show the value... Remember using the same calling convention in both exe and dll (e.g. stdcall).
alarddin
一般會員


發表:3
回覆:7
積分:2
註冊:2002-07-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-19 16:01:27 IP:61.221.xxx.xxx 未訂閱
謝謝 william,我知道問題所在了。 我沒在 Dll 的 .dpr 中加上 exports, 所以 Debug 的時候會怪怪的。 現在都好了,可是還剩下一個問題, 就是我一直沒辦法傳字串耶, 傳整數就可以,而且我已經有加 ShareMem 了, 可以再教我一下嗎??
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-19 16:26:42 IP:147.8.xxx.xxx 未訂閱
ShareMem should be listed as the very FIRST unit in the uses clause for both dll and exe projects (.dpr files).
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-19 16:29:04 IP:147.8.xxx.xxx 未訂閱
Oh~~~ ShareMem is used only when both dll and exe are written in Delphi.. For string passing between Delphi and VB, use PChar? or simply make your dll a COM object.
alarddin
一般會員


發表:3
回覆:7
積分:2
註冊:2002-07-25

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-19 16:33:33 IP:61.221.xxx.xxx 未訂閱
有耶,我有將 ShareMem 宣告在最前面, 我現在都只有 Delphi 去呼叫 Dll。 字串是有傳過去,但是每次關閉程式都會出現 'Run Time Error 217',一直不知道為什麼, 而且我也不知道怎樣查 Run Time Error 耶
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-19 17:14:51 IP:147.8.xxx.xxx 未訂閱
217? It is EControlC.. Or should it be 216? In Delphi help, search for 'fatal errors' in the index tab...
alarddin
一般會員


發表:3
回覆:7
積分:2
註冊:2002-07-25

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-09-19 18:09:13 IP:61.221.xxx.xxx 未訂閱
嗯,雖然不知道為什麼,但是就是出現 217 耶。 不過有時也會出現 216,但是比較少。 為什麼只有我用 Dll 傳字串會碰到問題呢~~
alarddin
一般會員


發表:3
回覆:7
積分:2
註冊:2002-07-25

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-09-25 09:55:22 IP:61.221.xxx.xxx 未訂閱
雖然那個問題還在,但是我現在換了個方法。 就是我在 DLL 中傳 PChar,呼叫 DLL 的 Delphi 或 Visual Basic 都用 String 的形態存放傳回的值,就可以了。
系統時間:2024-05-03 14:30:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!