Com的一个问题?

viewer 2000-08-08 09:21:00
本人正在学习Com,现有一个问题请教:我作了一个Automation客房程序,使用了
#import "....tlb" ...这种方法来驱动组件,这个有一个IBank的接口,书上
说可以通过IBankPtr这个智能指针来使用这个接口,但编译时老是提示没有
IBankPtr的定义,请问是为什么? 谢谢!
...全文
311 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackjack 2000-09-07
  • 打赏
  • 举报
回复
idl中有一句library 名字空间,
名字空间::IBankPtr ptr(__uuidof(名字空间::类工厂名))
//OK


举个例子吧,Com对象的.IDL如下:

import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(0B463456-8499-11D4-95B2-5254ABDD134B),
dual,
helpstring("Inc Interface"),
pointer_default(unique)
]
interface Inc : IDispatch
{
[id(1), helpstring("method DoShow")] HRESULT DoShow([in]BSTR bstrMessage);
[propget, id(2), helpstring("property IntValue")] HRESULT IntValue([out, retval] long *pVal);
[propput, id(2), helpstring("property IntValue")] HRESULT IntValue([in] long newVal);
};

[
uuid(0B463441-8499-11D4-95B2-5254ABDD134B),
version(1.0),
helpstring("cp 1.0 Type Library")
]
library CPLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");

[
uuid(0B463457-8499-11D4-95B2-5254ABDD134B),
helpstring("nc Class")
]
coclass nc
{
[default] interface Inc;
};
};

以上.IDL仅功参考,com调用时不一定要,对象调用如下:

#include <windows.h>
#include <comdef.h>

#import "D:\vc++\cp\Debug\cp.dll"//对象的DLL的路径

int main(){
CoInitialize(NULL);
try {
CPLib::IncPtr/*接口指针*/ pInc(__uuidof(CPLib::nc/*类工厂名*/));

_bstr_t bstrMessage=L"Hello";

pInc->put_IntValue(007L);
pInc->DoShow(bstrMessage);
}
catch(const _com_error &e){
MessageBox(0,
(LPCTSTR)e.ErrorMessage(),
(LPCTSTR)"Com error",
MB_OK);
}

CoUninitialize();

return 0;
}
zcheny 2000-08-26
  • 打赏
  • 举报
回复
正确格式应该为
#import "...tlb" no_namespace
因为#import会自动建立一个以CLSID命名的一个名字空间,你需要用no_namespace使该空间的所有标示符能被全局访问。
xubin_sh 2000-08-10
  • 打赏
  • 举报
回复
用了名字空间了吗?
如果还不对的话不要import tlb文件,import dll文件试试看
随机开仓,止盈1~2个点,止损1~20个点能实现盈利正期望吗?《从编程小白到量化宗师之路》系列课程是一套综合性实战课程,涵盖股票,期货,虚拟货币等的交易方法和策略手段。《m单位止盈 n单位止损的方式,能不能实现盈利?》是本系列的第四个中级课程。本网站的课程宗旨是缩短个人或小型投资者与大型机构投资者之间的的差距。课程内容从交易者经常见到,经常思考的问题开始,通过分析成交后的盈亏分布,建立模型,刻画问题,并对问题以数学的方式进行了表达。从而得出结论。与市面上的其他理论课程不同,本课程注重实战,注重结果,全部模型代码均已经上传发表,学员上课后,可以使用自己的tick数据,进行分析。如果获取tick数据有疑问,可以参考课程:《期货CTP高频数据Tick下载》 https://edu.csdn.net/course/detail/24783本课程能够解答的问题有:1)请问1单位止盈,3单位止损的系统是否能实现正期望值? https://www.zhihu.com/question/423194389/answer/14989174122)抢帽子交易是什么意思?为什么有的人能够成功,说是取款机,而有的人说风险巨大,是老虎机。看过这个课程,您将会知道:a) 这类问题的究极解决方案,直达问题核心,不再纠结原因b)构建一段时间可用的交易策略c)知道“没有不变的策略”的原因  

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧