首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否将IDispatch*转换为字符串?

是否将IDispatch*转换为字符串?
EN

Stack Overflow用户
提问于 2010-02-25 02:24:09
回答 2查看 938关注 0票数 1

我正在使用ATL将一个旧的VB对象(不是我写的)转换为C++。根据IDL,其中一个方法接受IDispatch*作为参数,此方法的文档和示例声称您可以将字符串(它是将由控件创建和使用的对象的progid )或IDispatch*传递给已经创建的对象。我到底该如何在ATL中实现它呢?

例如,IDL:

代码语言:javascript
复制
[id(1)] HRESULT Test(IDispatch* obj);

示例(全部为JScript):

代码语言:javascript
复制
obj.Test("foo.bar");

代码语言:javascript
复制
var someObject = new ActiveXObject("foo.bar");
obj.Test(someObject);

更奇怪的是,实现此方法的实际VB代码实际上将'obj‘参数声明为字符串!然而,这一切似乎都奏效了。

您甚至可以将字符串传递给接受IDispatch*的COM方法吗?如果是这样的话,我能确定在我的C++ IDispatch*代码中这个ATL实际上是一个字符串吗?更好的是,如果它是一个实现特定接口的IDispatch,我希望调用它上的方法,或者实例化一个对象(如果它是一个字符串)。

欢迎任何想法!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-28 23:16:12

声明该方法,以便它接受变量参数,并在运行时检查实际类型。

票数 1
EN

Stack Overflow用户

发布于 2010-03-01 07:19:45

如果您有VB6类Class1的实例obj,并尝试将其分配给一个基本类型,如下所示

代码语言:javascript
复制
    Dim str As String
    str = obj

..。然后计算Class1的默认属性。同样的规则也适用于方法调用

代码语言:javascript
复制
Function MyFunc(str As String)
   ...
End Function

   MyFunc obj

仅当Class1定义了default属性并且obj的default属性值可以转换为String时,最后一个方法调用才会成功。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2328423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档