我在C#中为COM服务器定义了以下接口:
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("58C77969-0E7D-3778-9999-B7716E4E1111")]
public interface IMyInterface
{
string MyName { get; }
}
这个接口被引入并在Delphi XE5程序中实现。
导入的代码如下:
IMyInterface = interface(IUnknown)
['{58C77969-0E7D-3778-9999-B7716E4E1111}']
function Get_MyName (out pRetVal: WideString): HResult; stdcall;
end;
实现如下所示:
type
TMyImpl = class(TInterfacedObject, IMyInterface)
public
function Get_MyName (out pRetVal: WideString): HResult; stdcall;
end;
function TMyImpl.Get_MyName (out pRetVal: WideString): HResult;
var
s: string;
begin
s:=''; // empty!
pRetVal:=s;
result:=S_OK;
end;
当我使用C#像这样调用那个服务器时:
var server = new Server();
string s = server.MyName;
那么s是NULL,而不是预期的空字符串。
我该如何强制将空字符串作为空字符串传递到COM,而不是通过封送到NULL来替换它?