您的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
calling convention
function TDelphiCom.GetMessage(msg: WideString): WideString; safecall;
var
tempString: string;
begin
tempString := string(msg);
Result := WideString(tempString);
end;