activexform里怎样定义一个可以返回字符串类型的方法

时间:2022-08-20 19:07:06
我添加一个方法时都是
procedure 而不是function所以都不能返回

6 个解决方案

#1


添加一个参数,类别,有in,out,retval,设置成为retval.

#2


添加保存不了,提示:Out parameter requires pointer type

#3


BSTR *

#4


接口定义时,使用如下定义语句,delphi会自动生成一个接口函数形式,
function dd(var output:variant):variant;

然后你需要做的就是在function中将要返回的字符串数据都转为variant形式
下面是我最近做的一个ocx的接口的完整形式,你可以参考一下, 注意其中tmp变量的使用
//**:***************************************************************************
//**:功能:读指定磁道数据
//**:参数:magic 0:读所有磁道,1,2,3分别读对应磁道数据
//**:***************************************************************************
function TBC.getMagicInfo(magic: Integer; var magicInfo: OleVariant): Integer;
var
  tmp:string;
  i,j,ln:integer;
begin
  if BCReader=nil then
  begin
    result := -1103;
    exit;
  end;
  result := BCReader.getMagicInfo(magic,tmp);
  ln := length(tmp);
  //创建返回的OleVariant时,下标必须是从0开始的
  magicInfo := VarArrayCreate([0,ln-1],VarByte);
  for i:=1 to ln do
  begin
    j := ord(tmp[i]);
    magicInfo[i-1] := j;
  end;
end;

#5


调用接口时,也时使用variant数据类型接收,然后转换就可以了

#6


否则,如果你的返回中含有一些特殊字符,就会导致返回结果错误,用这种方式
无论什么字符,都可以返回了

#1


添加一个参数,类别,有in,out,retval,设置成为retval.

#2


添加保存不了,提示:Out parameter requires pointer type

#3


BSTR *

#4


接口定义时,使用如下定义语句,delphi会自动生成一个接口函数形式,
function dd(var output:variant):variant;

然后你需要做的就是在function中将要返回的字符串数据都转为variant形式
下面是我最近做的一个ocx的接口的完整形式,你可以参考一下, 注意其中tmp变量的使用
//**:***************************************************************************
//**:功能:读指定磁道数据
//**:参数:magic 0:读所有磁道,1,2,3分别读对应磁道数据
//**:***************************************************************************
function TBC.getMagicInfo(magic: Integer; var magicInfo: OleVariant): Integer;
var
  tmp:string;
  i,j,ln:integer;
begin
  if BCReader=nil then
  begin
    result := -1103;
    exit;
  end;
  result := BCReader.getMagicInfo(magic,tmp);
  ln := length(tmp);
  //创建返回的OleVariant时,下标必须是从0开始的
  magicInfo := VarArrayCreate([0,ln-1],VarByte);
  for i:=1 to ln do
  begin
    j := ord(tmp[i]);
    magicInfo[i-1] := j;
  end;
end;

#5


调用接口时,也时使用variant数据类型接收,然后转换就可以了

#6


否则,如果你的返回中含有一些特殊字符,就会导致返回结果错误,用这种方式
无论什么字符,都可以返回了