Ответы пользователя по тегу Delphi
  • Не могу вернуть строку из COM (Delphi)?

    unreturned
    @unreturned Автор вопроса
    Ответ был найден на stackoverflow.com/questions/4183773/how-to-return-widestring-from-com-server
    [
    odl,
    uuid(D94769D0-F4AF-41E9-9111-4D8BC2F42D69),
    version(1.0),
    helpstring("Interface for TMyCOM Object"),
    oleautomation
    ]
    interface ITMyCOM : IUnknown {
    HRESULT _stdcall MyDrawWS(
    [in] long a,
    [in] long b,
    [out, retval] BSTR* ret);
    };

    ITMyCOM = interface(IUnknown)
    ['{D94769D0-F4AF-41E9-9111-4D8BC2F42D69}']
    function MyDrawWS(a: Integer; b: Integer; out ret: WideString): HResult; stdcall;
    end;

    function TTMyCOM.MyDrawWS(a, b: Integer; out ret: WideString): HRESULT;
    begin
    ret := IntToStr(a+b);
    Result := S_OK;
    end;

    var
    W: WideString;
    begin
    OleCheck(MyCOM.MyDrawWS(1, 1, W));
    Edit1.Text := W;
    end;


    или поменять вызов stdcall на safecall

    ITMyCOM = interface(IUnknown)
    ['{D94769D0-F4AF-41E9-9111-4D8BC2F42D69}']
    function MyDrawWS(a: Integer; b: Integer): WideString; safecall;
    end;

    function TTMyCOM.MyDrawWS(a, b: Integer): WideString;
    begin
    Result := IntToStr(a+b);
    end;

    Edit1.Text := MyCOM.MyDrawWS(1, 1);
    Ответ написан
    Комментировать