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

本文详细阐述了在C语言和Delphi中如何正确定义和调用参数,特别是针对char*params[]类型参数的处理方法。包括参数的定义、调用方式以及可能遇到的问题和解决策略,旨在帮助开发者解决跨语言调用过程中的困扰。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


======================================================
注:本文源代码点此下载
======================================================

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

http://www.delphi2007.net/delphiapi/html/delphi_20061138888899995.html

vc写的动态库 一个参数定义成

“char*params[]”delphi中该如何定义?才能正确的调用。

有经验的朋友应该一看就知道。

因为好久没有来泡坛了。所以放100分吧。来者有分。

intdllexportpersonalizecard(longcardnumber,intnargs,char*params[])

如果成功会在c:下写ookk.txt文件

感兴趣的朋友可以通过下面地址下载dll 试验一下。

http://ys-h.ys168.com/ys168up/d1/?dll.rary72z7ld4f9f9b1f8z95b4b4b7b0b1b1fq9b4b2b7fl9fl6e14z97e14e24b1b2f2b1fl9b4fc6fd7z

params:arrayofchar

type

c=arrayofpchar;

intdllexportpersonalizecard(longcardnumber,intnargs,paramsc)

谢谢大家支持!如方便请大家下载后调用一下。

然后把程序贴出来。

to:hongqi162(失踪的月亮)

我试了一下,没成功。

相信你应该能搞定。赶快出手吧。

个人认为char*params[]是一个字符指针数组,不应该理解为arrayofchar,而应该理解为array[low..high]ofstring或tstringlist类。本人初学,对概念的理解可能较肤浅,高手勿笑

二楼arrayofpchar应该是最精确的理解了

用pchar

functionpersonalizecard(cardnumber:cardinal;nargs:integer;params:pchar):integer;

对应是arrayofpchar,我觉得

c里面有种调用方式是...,意思是说可以写入很多参数的那种,感觉params差不多。

lz这样一试:

var

buffer:array[0..10,0..1024]ofchar;

begin

//buffer赋值

personalizecard(no,10,@buffer);

end;

dll弄不下来,不弄了。

楼上的有道理,不过后面要加stdcall;externaldllname等,否则还是错误的.总之,那个参数是个指针就行了,至于怎样用,要看情况,输出和输入指针可有不同的处理

谢谢大家的支持,根据大家的思路早上我又试了一次还是不行。

百思不的其解呀!

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就可以了

用的时候定义一个arrayofchar数组就可以了!

在参数前面加个var就行了

最好把array的参数定义成record来传

类型严格对应的delphi声明是

params:ppchar;

定义成

params:arrayofpchar;也可以的,

arrayofpchar可以强制转换成ppchar不出问题,

但反过来转换不行的.

感觉楼主问题不在这儿.

看楼主的dllc声明中,并没有声明__stdcall,

那为什么delphi声明中要用stdcall?delphi声明对应的应该是cdecl

string是pascal特有的类型,不能直接兼容pchar

char*params[]

看成一个pchar的数组,就是arrayofpchar

functionpersonalizecard(

cardnumber:integer;

nargs:integer;

params:ppchar

):integer;stdcall;

proceduretform1.button1click(sender:tobject);

var

vparams:array[0..1]ofpchar;

begin

vparams[0]:='zswang';

vparams[1]:='到此一游';

personalizecard(1,2,@vparams[0]);

end;

你提供的demo无法调试,缺少mfc42d.dll、msvcrtd.dll

只有你自己调试了

关于arrayofchar与ppchar类型转换,可以看下面代码验证其可行.

//---------------------------------------------------------------

proceduretest(params:ppchar);//这儿用的ppchar类型,严格对应char*params[];

begin

showmessage(params^);

inc(params);

showmessage(params^);

end;

type

ttest2=procedure(params:arrayofpchar);

proceduretform1.button1click(sender:tobject);

var

s:arrayofpchar;

p:ttest2;

begin

setlength(s,2);

s[0]:='1234151';

s[1]:='abc';

p:=ttest2(@test);//函数转换,四字节指针赋值而已.

p(s);//参数使用arrayofppchar方式调用proceduretest

end;

char*params[]在一般的c++编译器(bcb、vc)是不能通过编译的,因为c++中不允许定义动态数组(c++的动态数组应该通过堆内存分配才行),但如果这样就不会错:char*params[]={“china”,“french”,“japan”};

char*params[]的准确含义应该是动态字符指针数组,在delphi中与arrayofpchar等价。

谢谢大家帮忙!虽然现在还没有调通但问题应该不是参数定义的问题了。通过讨论对c与delphi的类型有了更多的认识。

ding.......


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值