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

如何用 EXE 傳字串給 DLL

缺席
seeing
初階會員


發表:49
回覆:131
積分:41
註冊:2002-11-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-23 21:40:19 IP:123.110.xxx.xxx 訂閱
請教各位先進,小弟想利用EXE檔傳送字串給DLL,目前的做法如下:

in DLL
[code cpp]
void __stdcall Test(char *str)
{
Form1->RichEdit1->Lines->Add((char*)str);
}
[/code]
in EXE
[code cpp]
AnsiString str="test";

for(int i=0;i<10;i )
{
Test(str.c_str());
}
[/code]
目前遇到如果只單次執行 Test(); 是沒有問題的,但如果放在 for 迴圈內連續執行,就會發生錯誤;有找過一些文章,似乎可以用 Memory map 的方式解決,但要如何做就不是很清楚了,不知道可以提供點意見嗎?謝謝
編輯記錄
seeing 重新編輯於 2008-11-23 21:41:11, 註解 無‧
frontier
初階會員


發表:0
回覆:27
積分:30
註冊:2008-11-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-24 10:33:21 IP:59.120.xxx.xxx 訂閱
站上 Memory map 似乎可以查得到

===================引 用 seeing 文 章===================
請教各位先進,小弟想利用EXE檔傳送字串給DLL,目前的做法如下:

in DLL
[code cpp]
void __stdcall Test(char *str)
{
Form1->RichEdit1->Lines->Add((char*)str);
}
[/code]
in EXE
[code cpp]
AnsiString str="test";

for(int i=0;i<10;i )
{
Test(str.c_str());
}
[/code]
目前遇到如果只單次執行 Test(); 是沒有問題的,但如果放在 for 迴圈內連續執行,就會發生錯誤;有找過一些文章,似乎可以用 Memory map 的方式解決,但要如何做就不是很清楚了,不知道可以提供點意見嗎?謝謝
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-24 10:39:41 IP:122.120.xxx.xxx 訂閱
請問DLL有同時給數個exe檔共用嗎?

form1這個類別定義在哪? dll ? exe?

你有使用thread 嗎?

可能的話提供一下這三個資訊方便協助!
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
seeing
初階會員


發表:49
回覆:131
積分:41
註冊:2002-11-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-11-24 11:45:04 IP:220.128.xxx.xxx 訂閱
aftcast 您好:
目前是只有給一個exe檔使用而已,form1是定義在DLL內部,沒有使用thread

目前想做的功能如下:在EXE檔中,將字串丟給DLL中的Form1來顯示

謝謝您
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-11-25 09:28:24 IP:122.120.xxx.xxx 訂閱
從程式碼上來看,似乎不會有問題。再者,你是一個dll給一個exe用,並不需要share memory,當然也不需要memory map。

我覺得問題也許是出在 char * 指標參數傳遞問題。 可改成 ansistring 型別嗎?

此外,我非常好奇你說loop後會出錯,是出什麼錯?? 可以描述或是貼圖更好!

謝謝
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2008-11-25 09:29:08, 註解 無‧
seeing
初階會員


發表:49
回覆:131
積分:41
註冊:2002-11-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-11-25 12:34:37 IP:220.128.xxx.xxx 訂閱
aftcast 您好:
跑 Loop 的會出現以下錯誤

Project Project1.exe raised execption class EOutofResources with messagg 'RichEdit line insertion error'. Process stopped. Use Step or Run to continue.

一開始我也是用 AnsiString 的,也是發生一樣的錯誤,後來找了些文章看,似乎用 char * 會比較好,所以才改成 char *,但還是出現一樣的錯誤…

謝謝您
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-11-25 23:57:46 IP:122.120.xxx.xxx 訂閱
幫你找了一下google的資料,發現這下列的資訊很有用,請參照一下

http://209.85.173.132/search?q=cache:ayRt1LviGGQJ:www.delphibbs.com/delphibbs/dispq.asp?lid=2111942 EOutofResources dll&hl=zh-TW&ct=clnk&cd=10&gl=tw&client=firefox-a
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
seeing
初階會員


發表:49
回覆:131
積分:41
註冊:2002-11-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-11-26 22:53:48 IP:123.110.xxx.xxx 訂閱
aftcast 您好:
可能 RichEdit 是個問題,但不知道怎麼解決…
我有試過在 DLL 的 Test() 中,完全不做任何事,像底下這樣,一樣跑 loop 時會發生錯誤
[code cpp]
void __stdcall Test(char *str)
{
//
}
[/code]

Project1.exe faulted with mesage: 'access violation at 0x00000000: read of address 0x00000000'.
編輯記錄
seeing 重新編輯於 2008-11-27 07:24:11, 註解 無‧
seeing 重新編輯於 2008-11-27 07:25:18, 註解 無‧
seeing 重新編輯於 2008-11-27 07:26:01, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-11-26 22:58:21 IP:60.248.xxx.xxx 訂閱
或許可以試上篇那連結點最後一個人的建議,更新二個dll檔看看了!

不然就改用別的完件?!
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
seeing
初階會員


發表:49
回覆:131
積分:41
註冊:2002-11-07

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-11-27 07:28:50 IP:123.110.xxx.xxx 訂閱
aftcast 您好:
抱歉,程式沒貼好,完全不做任何事也會有問題…這個很奇怪…但如果不傳 char *, AnsiString,完全沒有任何引數的情況下,跑 loop 反而是可以過的,所以問題有可能出在 char * 身上嗎?
[code cpp]
void __stdcall Test(char *str)
{
//
}
[/code]
系統時間:2024-04-24 3:47:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!