delphi 'Char' and 'AnsiChar'报错问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 'Char' and 'AnsiChar'报错问题相关的知识,希望对你有一定的参考价值。

[DCC Error] 自动关机.pas(51): E2010 Incompatible types: 'Char' and 'AnsiChar' 这个报错貌似在 delphi7里面是不会报错的吧?请问能不能详细的告诉我一下 这个错误的解决办法?Char 和 AnsiChar 怎么变成了不同类型呢 要用函数转换吗?

楼上说错了还能推荐?看他的描述应该把AnsiChar看成pchar了.在Delphi2009之前,Char就是AnsiChar,Delphi2009后delphi支持unicode,所以char默认成了widechar,占两个字节.

象楼主出现的这种错误是把一个AnsiChar赋给一个char(WideChar)引起的,测试代码:
var a:char;
b:Ansichar;
begin
b:='a';
a:=b;//这里出现和楼主一样的错误
self.Caption:=a;
end;
处理方法:
var a:char;
b:Ansichar;
begin
b:='a';
a:=WideChar(b);//加WideChar强制转换
self.Caption:=a;
end;
参考技术A Char和AnsiChar本来就不是同一类型的

Char只占一个字节属于字符型的,而 AnsiChar是 Char的字符数组指针,可以存数N个字符, Char不需要转换就可以成为 AnsiChar
参考技术B 2010后使用的是unicode字符,char ansichar 可以互换一下。你可以百度搜索看看他们的区别就明白了 参考技术C 不知道你用的哪个版本,2010之前的版本,他们是一模一样的,只是名字不一样而已。

没代码,不好说。。

关于delphi调用C++的DLL中char*参数的问题

我现在在用delphi做一个接口,接口DLL是使用C++开发的,接口规范如下:
dll动态链接库文件名为:networkBillPrn.dll,无须注册,将dll文件放在系统文件目录或HIS系统的同一文件目录。方法: int CallBillService(char * inParams, char * outParams)传入参数inParams是json数据格式,传入参数outParams是以实参方式传入的,它的值是His系统调用票据系统的接口的返回结果,也是json数据格式,返回值是表示outParams的字符串长度。
我是这样实现的:
var
billTest: TbillTest;
//调用方法CallBillService
function CallBillService(inParams:PChar; outParams:PChar): Integer; stdcall; external 'NetworkBillPrnDll.dll';
implementation

$R *.dfm

procedure TbillTest.btn1Click(Sender: TObject);
var
jo,jt:ISuperObject;
billAddr,inParam:String;
returnNum:Integer;
outParam:PChar;
begin
billAddr:=UpperCase(Trim(Edit_Addr.Text));
jo:=SO('"billAddr":"http://202.99.207.176:7001/BILL/BsExecute","appVersion":"1.0.0.1","deptNode":"16100101","secretKey":"A990AA3E8D9FDE5D04EA0BAE88450A0B0D4BA8931778CDCA17","methodName":"getValidBillNo","busName":"hisMz","billReg":"测试"');
inParam:=jo.AsString;
//将json内容写入日志文件
writeTxt(PChar(inParam),'测试服务器端-输入');
outParam:='';
//执行到下面这条语句报错
returnNum:= CallBillService(PChar(inParam),outParam);
writeTxt(outParam,'测试服务器端-输出');
ShowMessage(IntToStr(returnNum));
end;

procedure TbillTest.writeTxt(tmpString:string;operaName:string);
var
wText: TextFile;
shijian:string;
begin
shijian:=DateTimeToStr(Now());
AssignFile(wText, 'logo.txt');
Append(wText);
Writeln(wText,'-----时间:' + shijian + '--操作:' + operaName + '-----');
Writeln(wText, tmpString);
CloseFile(wText);
end;

end.
请高手给予解答,谢谢。

&符号在c++中是表示引用类型,在c#中类似ref,在dellphi作为参数有var关键字来表示:BOOLNVS_Login(ULONG&lLoginID,constchar*szNvsIP,intnNvsPort,constchar*szUser,constchar*szPwd)转为delphi:functionNVS_Login(varlLoginID:DWORD;constszNvsIP:PChar;constszUser:PChar;constszPwd:PChar):boolean; 参考技术A 调用前,参数变量,初始化一下

~
~
~追问

怎么初始化,能给举一个例子吗?

以上是关于delphi 'Char' and 'AnsiChar'报错问题的主要内容,如果未能解决你的问题,请参考以下文章

delphi函数调用

不修改系统日期和时间格式,解决Delphi报错提示 '****-**-**'is not a valid date and time

delphi问题

oracle查询语句中使用between and 查询效率高吗? 与to_char相比如何?

delphi query的delete方法

delphi调用VC写的Dll报错