Ваша декларация RIDL верна.
Вы не показали объявление метода на C #, поэтому мы не можем видеть, правильно ли вы упорядочиваете параметры или нет.
В DelphiКроме того, в вашей реализации отсутствует stdcall
соглашение о вызовах (в соответствии с объявлением RIDL), а также обработка исключений, поэтому вы можете возвращать правильное значение HRESULT
при сбоях:
function TDelphiCom.GetMessage(msg: WideString; out RetVal: WideString): HRESULT; stdcall;
var
tempString: string;
begin
try
tempString := string(msg);
RetVal := WideString(tempString);
Result := S_OK;
except
// do something...
Result := DISP_E_EXCEPTION;
end;
end;
Хотя вы действительновместо этого следует использовать safecall
соглашение о вызовах и позволить ему иметь дело с обработкой ошибок для вас:
function TDelphiCom.GetMessage(msg: WideString): WideString; safecall;
var
tempString: string;
begin
tempString := string(msg);
Result := WideString(tempString);
end;