2013-01-14 47 views
1

我具有如下面提及的具有函数签名一个COM接口:的Guid对象

的GuidGetGuid2()

它是在一个类中实现:

public Guid GetGuid2() 
    { 
     return Guid.NewGuid(); 
    } 

然后这个函数需要被Perl使用。

my $dotNetLib = 'MyCOMDLL'; 
    my $server = Win32::OLE->new($dotNetLib) || die "Unable to launch server\n"; 
    my $guid = $server->GetGuid2(); 

但我收到此错误:

Win32::OLE(0.1601) error 0x80020005: "Type mismatch" at Playground.pl

是否有可能为我们在COM层的回GUID对象?

+0

你确定你有正确的样本粘贴:不同的名称GetGuid和GetGuid2用于C#和Perl的部分... –

+0

这是一个错字错误..我修好了。 – K2M

回答

2

当您需要通过.NET从COM返回一个GUID时,您需要将其转换为Byte []或String,然后将其重建为另一端的guid或执行字符串比较,因为GUID不是' t COM兼容类型。

+0

嗨保罗,我们需要获得GUID对象,以便我们可以将GUID分配给另一个对象的属性。如果转换为字符串是我们得到的唯一选项,那么我们将沿着这条路线前进。但是,探索是否有任何我们可以在COM层中公开GUID。 – K2M

+0

我完全知道你在说什么,因为我需要做同样的事情。这是我最终不得不采取的方法。 –

+0

感谢Paul的评论 – K2M