pchar 参数传递的问题!

hygougou 2010-11-20 06:45:10
函数声明:---输出到dll

Function getruimeiserial(unit:pchar;ins:pchar;spass:pchar;out s:pchar):pchar;stdcall;


函数:

Function getruimeiserial(unit:pchar;ins:pchar;spass:pchar;out s:pchar):pchar;stdcall;
var tmp:char;
sp:pchar;
i,lens,values:integer;
tmpstring:string;
vbuffer:array[0..255] of char;
rc:pchar;

begin

if spass <> ‘1209’then
result := '0'
else
try
strecopy(strecopy(vbuffer,unit),ins);
sp := vbuffer;
values := 0;
lens := length(sp);
for i := 1 to lens do
begin
tmp := sp[i];
values := values + ord(tmp);
end;

if values > 999999 then
tmpstring := copy(inttostr(values),1,6)
else
tmpstring := inttostr(trunc(values * power(10,6 - length(inttostr(values)))));
rc := Pchar(tmpstring + inttostr(trunc(256 - values mod 256)));
s:= AllocMem(Length(rc)+1);
strPcopy(skey,rc);
s:= rc;
result := Pchar(tmpstring + inttostr(trunc(256 - values mod 256)));
except
result := '0'
end

end;



问题:
引入参数s现在无法正常输出---乱码!

前提:
引入参数类型不能更改,因为要供其他工具语言调用!!!

求解!!,谢谢
...全文
249 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
whinda 2012-11-21
  • 打赏
  • 举报
回复
这个是ruimei的dssdll.dll封装的函数哟,函数原型:integer GetRuiMeiSerial ref string@,ref string@,ref string@,ref string@ 四个参数均是引用传递的,最后一个参数是空的用于接收传回的注册码,你的显示为乱码的话,是调用函数前没有为最后一个引入变量分配空间,为那个变量分配10-15个字节的空间就对了。
hygougou 2010-11-22
  • 打赏
  • 举报
回复
s即=skey,楼上说的正是,不好意思,笔误了,

这个参数传递蛮头疼的,搜了很多资料似乎也没什么好的解决办法
池龙 2010-11-21
  • 打赏
  • 举报
回复
给S分配内存的工作应当放在调用函数的程序里进行而不是在DLL里进行
  • 打赏
  • 举报
回复
s:= AllocMem(Length(rc)+1);
strPcopy(skey,rc);
s:= rc;

这里那个skey是什么,好像没有看到声明过啊。
rc是个局部变量,函数返回时被清空,即rc变成野指针,而s指向rc所以可能是任何值。
加一句strPCopy(s,rc);,如果你那句strPcopy(skey,rc);是笔误的话,那就注意字符编码的问题,你的dll和程序是不是使用相同的字符编码,即pchar在dll和程序里是不是都是指向ansichar。
dinoalex 2010-11-20
  • 打赏
  • 举报
回复
先在DLL里面,把S写入TXT文本看看有没有乱码.

再看指针地址

1,183

社区成员

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

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