_TLB.pas ファイルのこのインターフェイス
// *********************************************************************//
// 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;
これはOS 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));
$75A9FBAE でエラー First chance exception を取得します。メッセージ「モジュール 'RPCRT4.dll' のアドレス 75A409A4 でのアクセス違反」を伴う例外クラス EAccessViolation。アドレス FFFFFFF8' の読み取り。プロセス Project1.exe (2296)
整数を返したい場合は、うまくいきます。ワイドストリングを返す方法は?