首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

pchar 参数传递的有关问题

2013-01-08 
pchar 参数传递的问题!函数声明:---输出到dllFunction getruimeiserial(unit:pcharins:pcharspass:pchar

pchar 参数传递的问题!
函数声明:---输出到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现在无法正常输出---乱码!

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

求解!!,谢谢
[解决办法]
该回复于2010-12-02 15:41:38被版主删除
[解决办法]
先在DLL里面,把S写入TXT文本看看有没有乱码.

再看指针地址
[解决办法]
给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。

热点排行