我正在使用ATL将一个旧的VB对象(不是我写的)转换为C++。根据IDL,其中一个方法接受IDispatch*作为参数,此方法的文档和示例声称您可以将字符串(它是将由控件创建和使用的对象的progid )或IDispatch*传递给已经创建的对象。我到底该如何在ATL中实现它呢?
例如,IDL:
[id(1)] HRESULT Test(IDispatch* obj);示例(全部为JScript):
obj.Test("foo.bar");或
var someObject = new ActiveXObject("foo.bar");
obj.Test(someObject);更奇怪的是,实现此方法的实际VB代码实际上将'obj‘参数声明为字符串!然而,这一切似乎都奏效了。
您甚至可以将字符串传递给接受IDispatch*的COM方法吗?如果是这样的话,我能确定在我的C++ IDispatch*代码中这个ATL实际上是一个字符串吗?更好的是,如果它是一个实现特定接口的IDispatch,我希望调用它上的方法,或者实例化一个对象(如果它是一个字符串)。
欢迎任何想法!
发布于 2010-02-28 23:16:12
声明该方法,以便它接受变量参数,并在运行时检查实际类型。
发布于 2010-03-01 07:19:45
如果您有VB6类Class1的实例obj,并尝试将其分配给一个基本类型,如下所示
Dim str As String
str = obj..。然后计算Class1的默认属性。同样的规则也适用于方法调用
Function MyFunc(str As String)
...
End Function
MyFunc obj仅当Class1定义了default属性并且obj的default属性值可以转换为String时,最后一个方法调用才会成功。
https://stackoverflow.com/questions/2328423
复制相似问题