VB中调用Delphi写的COM组件的问题。 没有人会吗???? (50分)

  • 主题发起人 主题发起人 slush
  • 开始时间 开始时间
S

slush

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Delphi写的COM,接口中有一个函数,返回值是widestring类型,为何在VB中一调用就发生提示为"应用程序发生异常 未知的软件异常(0x0eedfade),位置为0x77e6a4e1"的错误?谢谢!!
////////////////////////////////////////////////
type
TLegendToPoModel = class(TTypedComObject, ILegendToPoModel)
protected
function InitMe(const ActiveKeyStr: WideString): WideString; stdcall;
end;
implementation
uses ComServ;
function TLegendToPoModel.InitMe(const ActiveKeyStr: WideString): WideString;
begin
result:='Init Ok!';//Result:='',也一样有错误?
end;
////////////////////////////////////
Private Sub Command1_Click()
Dim L As New LToPoMODEL.LegendToPoModel
MsgBox L.InitMe("")
Set L = Nothing
End Sub
 
你写的COM并没有遵循相应的标准,InitMe 必须返回HRESULT 因此代码应该如下:
function TLegendToPoModel.InitMe(const ActiveKeyStr: WideString;
out outstr: WideString): HResult;
begin
outstr:='abc';
result:=S_Ok
end;
IDL 应当如此定义
.....
interface ILegendToPoModel: IUnknown
{
[
id(0x00000065)
]
HRESULT _stdcall InitMe([in] BSTR ActiveKeyStr, [out, retval] BSTR * outstr );
};
....
就可以正常的在VB、vc中使用了
 
后退
顶部