D
djjsl
Unregistered / Unconfirmed
GUEST, unregistred user!
在下有一个函数post,有四个参数要输入,一个返回值,在下想通过atl和dephi实现,
vc的idl如下:
interface ITeleNote : IDispatch {
[id(0x00000001), helpstring("method Post")]
HRESULT Post(
[in] BSTR phonenumber,
[in] BSTR message,
[in] short billtype,
[in] BSTR billphone,
[out, retval] short* result);
测试成功。然后,在下接着实现delphi的,我选了activex library + com,定义方法post
如下:
interface ITeleNote : IUnknown {
HRESULT _stdcall Post(
[in] BSTR phonenumber,
[in] BSTR message,
[in] short billtype,
[in] BSTR billphone,
[out, retval] short* rst);
现在,问题来了,post的最后一个参数rst在程序中声明总是这样:
function Post(const phonenumber, message: WideString; billtype: Smallint;
const billphone: WideString; out rst: Smallint): HResult; stdcall;
如上,rst总是一个out型,而不是out,retval型。
我接着作了两个delphi的客户端测试程序,分别对atl和delphi的组件进行测试,导入了
他们的lib文件,发现atl的post函数是如下:
function TTeleNote.Post(const phonenumber: WideString; const message: WideString;
billtype: Smallint; const billphone: WideString): Smallint;
begin
Result := DefaultInterface.Post(phonenumber, message, billtype, billphone);
end;
而delphi的确是如下:
function TTeleNote.Post(const phonenumber: WideString; const message: WideString;
billtype: Smallint; const billphone: WideString; out rst: Smallint): HResult;
begin
DefaultInterface.Post(phonenumber, message, billtype, billphone, rst);
end;
请问,我在delphi编写com时该如何声明参数,才能使得情况和atl编的组件一样。
另外,还有个问题,atl的组件是实现了idispatch接口的,但在delphi中选择com,
只是实现了iunkown接口,我的组件需要在脚本或delphi,vc,vb中使用,在delphi
中该选择那个方式?
vc的idl如下:
interface ITeleNote : IDispatch {
[id(0x00000001), helpstring("method Post")]
HRESULT Post(
[in] BSTR phonenumber,
[in] BSTR message,
[in] short billtype,
[in] BSTR billphone,
[out, retval] short* result);
测试成功。然后,在下接着实现delphi的,我选了activex library + com,定义方法post
如下:
interface ITeleNote : IUnknown {
HRESULT _stdcall Post(
[in] BSTR phonenumber,
[in] BSTR message,
[in] short billtype,
[in] BSTR billphone,
[out, retval] short* rst);
现在,问题来了,post的最后一个参数rst在程序中声明总是这样:
function Post(const phonenumber, message: WideString; billtype: Smallint;
const billphone: WideString; out rst: Smallint): HResult; stdcall;
如上,rst总是一个out型,而不是out,retval型。
我接着作了两个delphi的客户端测试程序,分别对atl和delphi的组件进行测试,导入了
他们的lib文件,发现atl的post函数是如下:
function TTeleNote.Post(const phonenumber: WideString; const message: WideString;
billtype: Smallint; const billphone: WideString): Smallint;
begin
Result := DefaultInterface.Post(phonenumber, message, billtype, billphone);
end;
而delphi的确是如下:
function TTeleNote.Post(const phonenumber: WideString; const message: WideString;
billtype: Smallint; const billphone: WideString; out rst: Smallint): HResult;
begin
DefaultInterface.Post(phonenumber, message, billtype, billphone, rst);
end;
请问,我在delphi编写com时该如何声明参数,才能使得情况和atl编的组件一样。
另外,还有个问题,atl的组件是实现了idispatch接口的,但在delphi中选择com,
只是实现了iunkown接口,我的组件需要在脚本或delphi,vc,vb中使用,在delphi
中该选择那个方式?