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
“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
c=array of PChar;int DllExport PersonalizeCard (long CardNumber, int nargs, params c)
然后把程序贴出来。to:hongqi162(失踪的月亮)
我试了一下,没成功。
相信你应该能搞定。赶快出手吧。
LZ这样一试:
var
Buffer: array [0..10, 0..1024] of Char;
begin
//buffer赋值
PersonalizeCard (no, 10, @Buffer);
end;dll弄不下来,不弄了。
百思不的其解呀!to:maozefa(阿发伯) 压栈方式已经检查过了stdcall。
三个参数都是入参。不好意思,上面的下载地址过期了,下面是新的百分百好用。
http://blog.chinaunix.net/upfile/061201092335.rar
char*p 等价 pchar(delphi)
我开了一个空间把DLL 传上去了。地址http://free.ys168.com/?goodok 的“软件下载”目录下的dll.rar 文件。希望高手出面解决这个问题
params: PPChar;
定义成
params: Array of PChar; 也可以的,
Array of PChar可以强制转换成PPChar不出问题,
但反过来转换不行的.
感觉楼主问题不在这儿.
看楼主的DLL C声明中,并没有声明__stdcall,
那为什么DELPHI声明中要用stdcall? DELPHI声明对应的应该是cdecl
看成一个PChar的数组,就是array of PCharfunction 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
只有你自己调试了
//---------------------------------------------------------------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[]的准确含义应该是动态字符指针数组,在delphi中与array of PChar等价。