線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1198
推到 Plurk!
推到 Facebook!

有關C 的 DLL ,delphi 如何宣告及呼叫

答題得分者是:rick060
ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-12-13 14:56:05 IP:210.66.xxx.xxx 未訂閱
 

C 語言寫的 ABC.DLL 中, 有一函式 xyz() 宣告如下
xyz (unsigned char* binaryData, int dataLength)



在 DELPHI 中引用該DLL函式,宣告是否如下:
const ABC = 'ABC.DLL';
procedure xyz( binaryData:array of AnsiString; dataLength:integer );stdcall;far;external ABC;

程式呼叫
str : AnsiString;
.......
xyz( Str , length(Str) );


謝謝您

------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
編輯記錄
ANDY8C 重新編輯於 2012-12-13 08:59:22, 註解 無‧
rick060
高階會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-12-13 15:58:57 IP:114.32.xxx.xxx 訂閱
unsigned char 在 C 裡可視為BYTE
而又是 Pointer
是我的話會使用
procedure xyz(address:Pointer;length:Integer);cdecl;external;

C :

.h
extern "C" __declspec(dllexport) void xyz(unsigned char* binaryData, int dataLength);

.cpp
void xyz(unsigned char* binaryData, int dataLength)
{
LPVOID address;
char msg[64];
address = (LPVOID)binaryData;
sprintf(msg,"received address:[%X] Length:[%d]",address,dataLength);
OutputDebugString(msg);
}

delphi:
procedure xyz(address:Pointer;length:Integer);cdecl;external 'dllTest.dll';

.pas

var
b : PByte;
begin
GetMem(b,500);
xyz(b,500);
FreeMem(b);
end;

===================引 用 ANDY8C 文 章===================


C 語言寫的 ABC.DLL 中, 有一函式 xyz() 宣告如下
const ABC = 'ABC.DLL';
xyz (unsigned char* binaryData, int dataLength)



在 DELPHI 中引用該DLL函式,宣告是否如下:
procedure xyz( binaryData:array of AnsiString; dataLength:integer );stdcall;far;external ABC;

程式呼叫
str : AnsiString;
.......
xyz( Str , length(Str) );


謝謝您

ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-12-13 19:22:01 IP:210.66.xxx.xxx 未訂閱
了解
我都試看看.

謝謝您

------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-12-13 20:59:39 IP:114.32.xxx.xxx 訂閱
在 DELPHI 中引用該DLL函式,宣告是否如下:
procedure xyz( binaryData:PAnsiChar; dataLength:integer );stdcall;far;external ABC;

程式呼叫
str : AnsiString;
.......
xyz( PAnsiChar(Str) , length(Str) );

除了樓上的解法,我覺得這樣應該也可以。雖然……我delphi語法不熟…哈。試一下嘛。
------



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

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2012-12-13 23:58:28 IP:210.66.xxx.xxx 未訂閱
大俠您也來了 ,感恩

聽說最近您發了

您的提示,我會試看看

謝謝您
===================引 用 aftcast 文 章===================
在 DELPHI 中引用該DLL函式,宣告是否如下:
procedure xyz( binaryData:PAnsiChar; dataLength:integer );stdcall;far;external ABC;

程式呼叫
str : AnsiString;
.......
xyz( PAnsiChar(Str) , length(Str) );

除了樓上的解法,我覺得這樣應該也可以。雖然……我delphi語法不熟…哈。試一下嘛。
------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
系統時間:2017-12-16 13:15:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!