2

我有一个 C# 程序集,其中包含一个 ComVisible 类,其方法采用 2 个字符串参数。我已经注册了程序集并使用 Delphi XE2 的“导入组件”命令将其导入。

C# 界面如下所示:

[ComVisible(true),
 Guid("132D7742-D86A-49E4-81FD-D804E6872475"),
 InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IResourceManager
{        
    int AddResource(string guid, string address);
}

导入的Delphi界面是这样的:

IResourceManager= dispinterface
['{132D7742-D86A-49E4-81FD-D804E6872475}']
function AddResource(const Guid: WideString; const address: WideString): Integer; dispid 1610743809;
end;

下面是如何从 Delphi 调用代码的示例:

procedure TResourceManager.AddResource(const Guid, Address: String);
var
  ResourceManager: IResourceManager;
begin
  ResourceManager := CoResourceManager.Create;
  ResourceManager.AddResource(Guid, Address);
end;

只要我不将空字符串从我的 Delphi 应用程序传递给方法,一切都会 100% 工作。当我这样做时,我在 .Net 端收到以下错误:

检测到 InvalidVariant 消息:在从非托管 VARIANT 转换为托管对象期间检测到无效 VARIANT。将无效的 VARIANT 传递给 CLR 可能会导致意外异常、损坏或数据丢失。

理想情况下,我希望能够使用空字符串 '' 从 Delphi 端调用该方法,并在 .Net 端执行string.IsNullOrEmpty(guid)来检查这种情况。到目前为止,我所能做的就是将#0传递给方法,而不是从 Delphi 传递 '' 但在 .Net 端,值变为“\0”,它既不是 null 也不是空的。

处理这个问题的正确方法是什么?

谢谢。

4

0 回答 0