Этот интерфейс в файле _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;
Это выглядит на ОС 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. Класс исключения EAccessViolation с сообщением «Нарушение прав доступа по адресу 75A409A4 в модуле« RPCRT4.dll ». Прочитайте адрес FFFFFFF8 '. Процесс Project1.exe (2296)
Если я хочу вернуть Integer, это работает. Как вернуть WideString?