DLL中,部分代码如下:
function Getconfigure(atype:pchar):pchar;export;stdcall;
var
configFilenametmp : string;
f : Tinifile;
ltype:string;
begin
ltype:=strpas(atype);
configFilenametmp:=Gettmp();
result:='';
f:=TInifile.Create(configfilenametmp);
if ltype='time' then
result:=pchar(f.ReadString('date','time',''));
f.Destroy;
Deletefile(configfilenametmp);
end;然后我在同一个DLL的另外一个地方使用这个函数
strpas(GetConfigure(pchar('time')));
最后得到的字符串却不完整,例如本来应该是 2003-12-11
但只返回了20,
但是我在函数里面检查时却是可以正确的得到 2003-12-11
而且如果我把最后两行注释掉,也是可以得到正确的值,
请问各位是什么道理?????????????另外再问一个问题,如果DLL中的函数不需要export,那么使用字符串时是否可以直接使用
string?
function Getconfigure(atype:pchar):pchar;export;stdcall;
var
configFilenametmp : string;
f : Tinifile;
ltype:string;
begin
ltype:=strpas(atype);
configFilenametmp:=Gettmp();
result:='';
f:=TInifile.Create(configfilenametmp);
if ltype='time' then
result:=pchar(f.ReadString('date','time',''));
f.Destroy;
Deletefile(configfilenametmp);
end;然后我在同一个DLL的另外一个地方使用这个函数
strpas(GetConfigure(pchar('time')));
最后得到的字符串却不完整,例如本来应该是 2003-12-11
但只返回了20,
但是我在函数里面检查时却是可以正确的得到 2003-12-11
而且如果我把最后两行注释掉,也是可以得到正确的值,
请问各位是什么道理?????????????另外再问一个问题,如果DLL中的函数不需要export,那么使用字符串时是否可以直接使用
string?
解决方案 »
- 关于delphi获取天气信息的问题
- 前今天在电驴找到一个Delphi参考 挺大好像上G了 可以最近在去找,找不到了 百度找不到
- 安装MediaPlay控件
- 请问如何得到dbgrid里被选中那一行的第三个值
- 求一完整的向USB口发送和接收数据的程序.
- 让系统启动只运行我的程序,用我的程序代替Explorer注册为系统的Shell,运行后怎么处理??
- 一个Delphi开发的ActiveX控件由PB调用时产生的问题。分不够再加。倾家荡产也可以2000分够不够?[别宰忒狠了就行]
- 怎样写软件的测试方案?在线等待!
- 请问有没有人会,用注册表屏蔽掉开始菜单的程序这一项?
- 为什么不能保存?为什么只能为只读?为什么从新启动,数据就没了?
- 在WINDOWS XP控制面板中新建数据源的奇怪问题
- sql数据库附加问题,请高手帮忙,在线等…
但一使用pchar传递,则出现问题,我想和pchar的分配有关,但具体针对这个例子,如何分配pchar呢?我用中间变量试过,
var
r:pchar;
......
begin
......
getmem(r,255);
r:=pchar(f.ReadString('date','time',''));
result:=r;
freemem(r);
......
end;问题依旧,是我分配PCHAR的方法不对吗?圆满回答上面问题者愿意单送200分.
比如你要返回PCHAR就可以;这个YOURRETURN就可直接返回了。
function Getconfigure(atype:pchar;YOURRETURN:PCHAR):INTEGER;export;stdcall;
2,这个PCHAR不可以直接等的;
result:=pchar(f.ReadString('date','time',''));
result:=r;
你应该用STRCOPY(RESULT,R);
getmem(result,255);
然後
StrCopy你的東西進去
不用FreeMem!不過, 更好的應該是修改聲明
function Getconfigure(atype:pchar, aRet: Pchar):boolean;export;stdcall;調用前用
GetMem(aRet, 255),
if GetConfigure(atype, aRet) then
Showmessage(StrPas(aRet));
FreeMem(aRet);