C语言中“char * params[]”的参数在delphi中该如何定义?100分求解决放过。

root3646 2006-11-30 04:58:01
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

...全文
367 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiuxing009 2006-12-05
  • 打赏
  • 举报
回复
ding.......
root3646 2006-12-05
  • 打赏
  • 举报
回复
谢谢大家帮忙!虽然现在还没有调通但问题应该不是参数定义的问题了。通过讨论对c与delphi的类型有了更多的认识。
halfdream 2006-12-04
  • 打赏
  • 举报
回复
关于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;
王集鹄 2006-12-04
  • 打赏
  • 举报
回复
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
只有你自己调试了
halfdream 2006-12-04
  • 打赏
  • 举报
回复
类型严格对应的DELPHI声明是
params: PPChar;


定义成
params: Array of PChar; 也可以的,
Array of PChar可以强制转换成PPChar不出问题,
但反过来转换不行的.


感觉楼主问题不在这儿.
看楼主的DLL C声明中,并没有声明__stdcall,
那为什么DELPHI声明中要用stdcall? DELPHI声明对应的应该是cdecl
所得寺内 2006-12-04
  • 打赏
  • 举报
回复
最好把array的参数定义成record来传
所得寺内 2006-12-04
  • 打赏
  • 举报
回复
在参数前面加个var就行了
lwk_hlj 2006-12-04
  • 打赏
  • 举报
回复
这个,还是用pointer就可以了

用的时候定义一个array of char 数组就可以了!
root3646 2006-12-04
  • 打赏
  • 举报
回复
谢谢大家的支持!
我开了一个空间把DLL 传上去了。地址http://free.ys168.com/?goodok 的“软件下载”目录下的dll.rar 文件。

希望高手出面解决这个问题
仙侣步惊云 2006-12-04
  • 打赏
  • 举报
回复
char * params[]在一般的C++编译器(Bcb、VC)是不能通过编译的,因为C++中不允许定义动态数组(C++的动态数组应该通过堆内存分配才行),但如果这样就不会错:char * params[]={“china”,“French”,“Japan”};
char * params[]的准确含义应该是动态字符指针数组,在delphi中与array of PChar等价。
  • 打赏
  • 举报
回复
char * params[]等价char** params
char*p 等价 pchar(delphi)
root3646 2006-12-01
  • 打赏
  • 举报
回复
谢谢大家的支持,根据大家的思路早上我又试了一次还是不行。
百思不的其解呀!

to:maozefa(阿发伯) 压栈方式已经检查过了stdcall。
三个参数都是入参。

不好意思,上面的下载地址过期了,下面是新的百分百好用。
http://blog.chinaunix.net/upfile/061201092335.rar
阿发伯 2006-11-30
  • 打赏
  • 举报
回复
楼上的有道理,不过后面要加stdcall; external dllname等,否则还是错误的.总之,那个参数是个指针就行了,至于怎样用,要看情况,输出和输入指针可有不同的处理
ERR0RC0DE 2006-11-30
  • 打赏
  • 举报
回复
用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弄不下来,不弄了。
lihuasoft 2006-11-30
  • 打赏
  • 举报
回复
二楼array of pchar应该是最精确的理解了
lihuasoft 2006-11-30
  • 打赏
  • 举报
回复
个人认为char * params[]是一个字符指针数组,不应该理解为array of char,而应该理解为array[low..high] of string或TstringList类。本人初学,对概念的理解可能较肤浅,高手勿笑
root3646 2006-11-30
  • 打赏
  • 举报
回复
谢谢大家支持!如方便请大家下载后调用一下。
然后把程序贴出来。

to:hongqi162(失踪的月亮)
我试了一下,没成功。
相信你应该能搞定。赶快出手吧。
hongqi162 2006-11-30
  • 打赏
  • 举报
回复
type
c=array of PChar;



int DllExport PersonalizeCard (long CardNumber, int nargs, params c)
zhuminghua 2006-11-30
  • 打赏
  • 举报
回复
params : array of char

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧