Delphi 呼叫 dll |
答題得分者是:cmf
|
sally
一般會員 發表:10 回覆:21 積分:6 註冊:2003-08-08 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
sally
一般會員 發表:10 回覆:21 積分:6 註冊:2003-08-08 發送簡訊給我 |
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
sally
一般會員 發表:10 回覆:21 積分:6 註冊:2003-08-08 發送簡訊給我 |
|
qoo1234
版主 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
取自 sally 所發表另一主題 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=36828
該處發表刪除
-----------------------------------------------------------------------
請教各位先進:Delphi 呼叫 VC++ 寫的 dll,其中一個函式內含3個參數,原函式及資料型態為int WINAPI RecvFromClient(LPSTR c_client_id, LPSTR c_data_buf, int *c_data_len);其中 LPSTR 在 VC++ 中的定義為
A 32-bit pointer to a character string,而 c_data_len 應為傳址方式,請問在Delphi應該如何宣告才對?謝謝! 另,前次問題不明確,浪費大家時間,對不起!
|
sally
一般會員 發表:10 回覆:21 積分:6 註冊:2003-08-08 發送簡訊給我 |
|
qoo1234
版主 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
引言: 對不起,我要保留被刪除的問題,反而是這個問題不清楚可以刪除。就此問題,大家若有解答..在此回覆即可! 請教各位先進:Delphi 呼叫 VC 寫的 dll 1.其中一個函式內含3個參數,原函式及資料型態為 int WINAPI RecvFromClient(LPSTR c_client_id, LPSTR c_data_buf, int *c_data_len); 2.其中 LPSTR 在 VC 中的定義為 A 32-bit pointer to a character string,而 c_data_len 應為傳址方式 請問在Delphi應該如何宣告才對? 網海無涯,學無止境! |
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
sally
一般會員 發表:10 回覆:21 積分:6 註冊:2003-08-08 發送簡訊給我 |
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
sally
一般會員 發表:10 回覆:21 積分:6 註冊:2003-08-08 發送簡訊給我 |
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
sally
一般會員 發表:10 回覆:21 積分:6 註冊:2003-08-08 發送簡訊給我 |
Hi, cmf:以下為Delphi部份程式碼 type PInteger = ^Integer; function RecvFromClient(Client_Id: PChar; Data_Buf: PChar; Data_Len: PInteger): Longint; implementation const dllname = 'test.dll'; function RecvFromClient; external dllname name 'RecvFromClient'; 編譯後的錯誤訊息為:Function needs result type 若將最後一列修正為
function RecvFromClient: Longint; external dllname name 'RecvFromClient';
則編譯後出現:Previous declaration of "RecvFromClient' not marked with the 'overload' directive 請問是否是那裡寫錯了?謝謝!!
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
sally
一般會員 發表:10 回覆:21 積分:6 註冊:2003-08-08 發送簡訊給我 |
Hi, cmf:這個dll的其它函式,其中connect及disconnect都沒問題,但recv就是不過, type PInteger = ^Integer;
type TChar = Array of Char; function Connect_Request(Dest: String; Port_Num: Longint): Longint; stdcall;
function Disconnect_Request(): Longint; stdcall;
function RecvFromClient(Client_Id: TChar; Data_Buf: TChar; Data_Len: PInteger): Longint; stdcall; implementation const dllname = 'test.dll'; function Connect_Request(Dest: String; Port_Num: Longint): Longint; external dllname name 'Connect_Request';
function Disconnect_Request(): Longint; external dllname name 'Disconnect_Request';
function RecvFromClient(Client_Id: TChar; Data_Buf: TChar; Data_Len: PInteger): Longint; external dllname name 'RecvFromClient'; 錯誤訊息如下:Project Project1.exe raised exception class EAcessViolation with message "Access violation at address 100014F7 in module 'test.dll'. write of address 00000000'. Process stopped. Use Stop or Run to continue. 另,雖然這支dll是公司同事寫的,但基於保密安全考量,他不方便提供原始碼讓我trace,所以增加排除問題的困難度;再次麻煩您了,謝謝!
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
sally
一般會員 發表:10 回覆:21 積分:6 註冊:2003-08-08 發送簡訊給我 |
Hi, cmf:函式名稱沒錯,以VB呼叫此dll,所有功能均可正常執行。 ...... {$R *.DFM} var
LbyRecv_Id: TChar;
LbyRecv_Data: TChar;
LlRecv_Len: PInteger; ...... procedure TForm1.Timer1Timer(Sender: TObject);
var
Ll_Return: Longint;
begin
Ll_Return := RecvFromClient(LbyRecv_Id, LbyRecv_Data, LlRecv_Len); ......
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
var
LbyRecv_Id: TChar;
LbyRecv_Data: TChar;
LlRecv_Len: PInteger; Recv_Id:array[0..512] of Char;
Recv_Data:array[0..512] of Char ;
Recv_Len:Integer; procedure TForm1.Timer1Timer(Sender: TObject);
var
Ll_Return: Longint;
begin Recv_Len:=512;
LbyRecv_Id :=@Recv_Id[0];
LbyRecv_Data:=@Recv_Data[0];
LlRecv_Len :=@Recv_Len; Ll_Return := RecvFromClient(LbyRecv_Id, LbyRecv_Data, LlRecv_Len); ......
------
︿︿ |
sally
一般會員 發表:10 回覆:21 積分:6 註冊:2003-08-08 發送簡訊給我 |
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |