C語言中“char * params[]”的參數在delphi中該如何定義?100分求解決放過。 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061130165801145.html
VC寫的動態庫 一個參數定義成
“char * params[]”delphi中該如何定義?才能正確的調用。
有經驗的朋友應該一看就知道。
因為好久沒有來泡壇了。所以放100分吧。來者有分。
int DllExport PersonalizeCard (long CardNumber, int nargs, char * params[])
如果成功會在C:下寫ookk.txt檔案
感興趣的朋友可以通過下面地址下載DLL 實驗一下。
http://ys-h.ys168.com/ys168up/D1/?dll.rary72z7ld4f9f9b1f8z95b4b4b7b0b1b1fq9b4b2b7fl9fl6e14z97e14e24b1b2f2b1fl9b4fc6fd7z
params : array of char
type
c=array of PChar;
int DllExport PersonalizeCard (long CardNumber, int nargs, params c)
謝謝大家支援!如方便請大家下載後調用一下。
然後把程式貼出來。
to:hongqi162(失蹤的月亮)
我試了一下,沒成功。
相信你應該能搞定。趕快出手吧。
個人認為char * params[]是一個字元指標數組,不應該理解為array of char,而應該理解為array[low..high] of string或TstringList類。本人初學,對概念的理解可能較膚淺,高手勿笑
二樓array of pchar應該是最精確的理解了
用PChar
function PersonalizeCard (CardNumber: Cardinal; nargs: Integer; params: PChar): Integer;
對應是array of PChar,我覺得
C裡面有種調用方式是...,意思是說可以寫入很多參數的那種,感覺params差不多。
LZ這樣一試:
var
Buffer: array [0..10, 0..1024] of Char;
begin
//buffer賦值
PersonalizeCard (no, 10, @Buffer);
end;
dll弄不下來,不弄了。
樓上的有道理,不過後面要加stdcall; external dllname等,否則還是錯誤的.總之,那個參數是個指標就行了,至於怎樣用,要看情況,輸出和輸入指標可有不同的處理
謝謝大家的支援,根據大家的思路早上我又試了一次還是不行。
百思不的其解呀!
to:maozefa(阿發伯) 壓棧方式已經檢查過了stdcall。
三個參數都是入參。
不好意思,上面的到期了,下面是新的百分百好用。
http://blog.chinaunix.net/upfile/061201092335.rar
char * params[]等價char** params
char*p 等價 pchar(delphi)
謝謝大家的支援!
我開了一個空間把DLL 傳上去了。地址http://free.ys168.com/?goodok 的“軟體下載”目錄下的dll.rar 檔案。
希望高手出面解決這個問題
這個,還是用pointer就可以了
用的時候定義一個array of char 數組就可以了!
在參數前面加個var就行了
最好把array的參數定義成record來傳
類型嚴格對應的DELPHI聲明是
params: PPChar;
定義成
params: Array of PChar; 也可以的,
Array of PChar可以強制轉換成PPChar不出問題,
但反過來轉換不行的.
感覺樓主問題不在這兒.
看樓主的DLL C聲明中,並沒有聲明__stdcall,
那為什麼DELPHI聲明中要用stdcall? DELPHI聲明對應的應該是cdecl
string是Pascal特有的類型,不能直接相容PChar
char * params[]
看成一個PChar的數組,就是array of PChar
function PersonalizeCard (
CardNumber: Integer;
nargs: Integer;
params: PPChar
): Integer; stdcall;
procedure TForm1.Button1Click(Sender: TObject);
var
vParams: array[0..1] of PChar;
begin
vParams[0] := 'Zswang';
vParams[1] := '到此一遊';
PersonalizeCard(1, 2, @vParams[0]);
end;
你提供的Demo無法調試,缺少Mfc42d.dll、MSVCRTD.DLL
只有你自己調試了
關於array of char 與PPCHAR 類型轉換,可以看下面代碼驗證其可行.
//---------------------------------------------------------------
procedure test(params : ppchar);//這兒用的PPChar類型,嚴格對應char* params[];
begin
ShowMessage(params^);
inc(params);
ShowMessage(params^);
end;
type
ttest2 = procedure(params: array of pchar);
procedure TForm1.Button1Click(Sender: TObject);
var
s: array of pchar;
p: ttest2;
begin
setlength(s,2);
s[0] := '1234151';
s[1] := 'abc';
p := ttest2(@test);//函數轉換,四位元組指標賦值而已.
p(s); //參數使用array of ppchar 方式調用procedure test
end;
char * params[]在一般的C++編譯器(Bcb、VC)是不能通過編譯的,因為C++中不允許定義動態數組(C++的動態數組應該通過堆記憶體配置才行),但如果這樣就不會錯:char * params[]={“china”,“French”,“Japan”};
char * params[]的準確含義應該是動態字元指標數組,在delphi中與array of PChar等價。
謝謝大家幫忙!雖然現在還沒有調通但問題應該不是參數定義的問題了。通過討論對c與delphi的類型有了更多的認識。
ding.......