2009-12-09 55 views
0

我接触到COM一些C#接口:C#COM服务器 - 测试在C++

interface IMyInterface 
{ 
    IMyListObject[] MyList 
    { 
    get; 
    } 
} 

interface IMyListObject 
{ 
//properties that don't matter 
} 

到目前为止,我测试我们的组件是如何接触到COM从C++和大部分工作就好了。

我目前的问题是在一点我有2个IMyInterface实例,需要从一个MyList复制到另一个。

如果我只是把这个在C++:

myInterfaceB->MyList = myInterfaceA->MyList; 

这给E_POINTER的HRESULT。

MyList返回一个SAFEARRAY *,等效代码在C#中工作得很好。

我通常不是C++开发人员,我该如何解决这个问题?

回答

2

不确定E_POINTER是否合理,或者它为什么会在C#中工作。它不能工作,你的MyList属性没有属性设置器。它并不是真的需要一个,你不必改变数组,只需要改变数组的内容。使用SafeArrayXxxx()函数,使用ATL CComSafeArray或MFC COleSafeArray包装器可以更轻松地进行操作。

+0

问题是我暴露数组作为类,而不是暴露给com的接口。有一些免费的答复点。 – jonathanpeppers 2009-12-09 18:41:53