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

有關delphi的dll呼叫vc寫的dll,無法回傳值的問題

答題得分者是:chenyk
macchen
初階會員


發表:66
回覆:102
積分:33
註冊:2006-07-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-05-22 11:13:33 IP:118.169.xxx.xxx 訂閱
請問一下,我在delphi的dll中呼叫vc寫的dll,並且在呼叫vc的dll時,需傳入變數a,然後在vc中會讀取這個變數的值,並且修改,再回傳到delphi的變數a,請問該如何做呢,我的例子如下,想請教一下各位,我是不是那邊觀念有問題,謝謝,不用delphi做exe來呼叫vc,因為最前端呼叫delphi的dll是別人寫的程式,我只能提供delphi的dll給他呼叫,而vc的dll是因為要實作別的程式碼,所以才需要這樣子連結,麻煩有經驗的人指導一下小弟,謝謝您的意見。

EX: vc dll = VCDLL ;

delphi dll
function Daaa(a:string);integer; stdcall; exports ;

function aaa(a:PChar):integer; cdecl; external 'VCDLL' ; <-----呼叫vc dll的宣告

vc dll
int __declspec(dllexport) aaa(char *a);


[code delphi]
function Daaa(a:string);integer;
var
a:PChar;
s:string;
begin
GetMem(a, 256);
a := 'xyz' ;
aaa(a) ;
s := a ;
showmessage(s);<-----------這邊回傳都是xyz
FreeMem(a);
end;

[/code]

[code cpp]
int aaa(char *a)
{
AfxMessageBox(a);
a = "abc" ; <-----------此處不是改值了,應該是要變成abc回傳才對
return 1 ;
}
[/code]
------
DELPHI初學者
編輯記錄
macchen 重新編輯於 2011-05-21 21:27:05, 註解 無‧
macchen 重新編輯於 2011-05-21 21:27:51, 註解 無‧
rick060
高階會員


發表:2
回覆:112
積分:217
註冊:2009-11-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-05-23 08:28:48 IP:60.250.xxx.xxx 未訂閱
  char *ptr = NULL;
ptr = "123";
printf("%d\n",ptr);
ptr = "456";
printf("%d\n",ptr);
ptr = "789";
printf("%d\n",ptr);

結果:
4282184
4282176
4282172


結論:你會犯這個錯誤真的蠻挫賽的,代表一些基礎功還不夠。
chenyk
高階會員


發表:14
回覆:94
積分:171
註冊:2002-07-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-05-30 10:16:45 IP:125.230.xxx.xxx 未訂閱
 如果對方可以使用你的dll
那對方自己就能直接連接vc 的DLL,
也可以把一個連接 VC DLL 的 *.h檔 轉換成 pas檔格式給對方就行了
不需要浪費功夫作delphi dll
系統時間:2017-12-13 11:23:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!