这是_TLB.pas文件中的接口。
在COM客户端中,我会像这样调用这个函数:
// *********************************************************************//
// Interface: ITMyCOM
// Flags: (256) OleAutomation
// GUID: {D94769D0-F4AF-41E9-9111-4D8BC2F42D69}
// *********************************************************************//
ITMyCOM = interface(IUnknown)
['{D94769D0-F4AF-41E9-9111-4D8BC2F42D69}']
function MyDrawWS(a: Integer; b: Integer): WideString; stdcall;
end;
这篇文章涉及到Windows操作系统。
[
odl,
uuid(D94769D0-F4AF-41E9-9111-4D8BC2F42D69),
version(1.0),
helpstring("Interface for TMyCOM Object"),
oleautomation
]
interface ITMyCOM : IUnknown {
BSTR _stdcall MyDrawWS(
[in] long a,
[in] long b);
};
COM服务器中的函数如下:
function TTMyCOM.MyDrawWS(a, b: Integer): WideString;
begin
Result := WideString(IntToStr(a+b));
end;
在COM客户端中,我会像这样调用这个函数:
Edit1.Text := String(MyCOM.MyDrawWS(1,1));
当返回整数时,它可以正常工作。如何返回WideString?出现以下错误:在$75A9FBAE处第一次遇到异常。异常类别为EAccessViolation,消息为“在模块'RPCRT4.dll'中的地址75A409A4处访问冲突。读取地址FFFFFFFF8”。进程Project1.exe(2296)
Result:=IntToStr(a+b);
就可以了。 - Stijn Sanders