我
我是左派
Unregistered / Unconfirmed
GUEST, unregistred user!
我现在要做一个非常简单的COM控件。要完成的功能如下:
在服务器放定义一个函数,有输入,有输出。形式如下:
function getstring(param1:integer):string;
意思就是想用这个函数对输入的整数作一些处理,然后再以字符串的形式返回输出的结果。
就这么的功能,很简单的。
于是我作如下操作:
先建立一个COM对象,命名为SRV,接口为ITEST和TEST。
在ITEST下我建一个METHOD,命名为GetString,然后再在Parameters页加一个参数:Value.
TYPE为BSTR* ,Modifier为[out,retval].添加完毕后再添加一个参数Param1,type为long,
Modifier为[in].
然后REFRESH,就会在TestIMPL.pas文件中看到函数GetString 的定义如下:
type
TTest = class(TObject, ITest)
protected
function getName(Param1: Integer): WideString; safecall;
{ Protected declarations }
end;
我在下面的实现部分添加代码:
function TTest.SetName(Param1: Integer): WideString;
begin
result:=intTOstr(param1);
end;
运行、注册都正常。
然后再做一个客户端。在Form1的private部分定义一个接口变量F:ITest.
if F=nil then
F:=ITestObject(CoTestObject.Create);
i:=22;
//到下面出错。
edit1.text:=f.SetName(i);
出错的代码是:Types of actual and formal var parameters must be indentical
上面的程序是我看完《DELPHI4编程技术内幕》之后的例子。原书的例子是返回一个时间。
我试过,很正常。
我不知道我的这个代码错在那里。现在帖出来望大家能够讨论讨论。
在服务器放定义一个函数,有输入,有输出。形式如下:
function getstring(param1:integer):string;
意思就是想用这个函数对输入的整数作一些处理,然后再以字符串的形式返回输出的结果。
就这么的功能,很简单的。
于是我作如下操作:
先建立一个COM对象,命名为SRV,接口为ITEST和TEST。
在ITEST下我建一个METHOD,命名为GetString,然后再在Parameters页加一个参数:Value.
TYPE为BSTR* ,Modifier为[out,retval].添加完毕后再添加一个参数Param1,type为long,
Modifier为[in].
然后REFRESH,就会在TestIMPL.pas文件中看到函数GetString 的定义如下:
type
TTest = class(TObject, ITest)
protected
function getName(Param1: Integer): WideString; safecall;
{ Protected declarations }
end;
我在下面的实现部分添加代码:
function TTest.SetName(Param1: Integer): WideString;
begin
result:=intTOstr(param1);
end;
运行、注册都正常。
然后再做一个客户端。在Form1的private部分定义一个接口变量F:ITest.
if F=nil then
F:=ITestObject(CoTestObject.Create);
i:=22;
//到下面出错。
edit1.text:=f.SetName(i);
出错的代码是:Types of actual and formal var parameters must be indentical
上面的程序是我看完《DELPHI4编程技术内幕》之后的例子。原书的例子是返回一个时间。
我试过,很正常。
我不知道我的这个代码错在那里。现在帖出来望大家能够讨论讨论。