ATL编译的一个COM组件,一定要对调用方提供相关头文件吗?
ATL编译的一个COM组件,一定要对调用方提供相关头文件吗?
有没有什么方法可以让调用方不需要那些头文件就可以使用这个组件呢?
就好象动态连接库那样如果有头文件和lib是一种调用方法。
如果没有头文件呢,直接用DLL来Loadlibrary()也是一种调用方法。
比如说,我现在有这个组件,但没有它的头文件,那我怎么调用这个组件里的接口呢?还请帮忙!
问题点数:20、回复次数:9Top
1 楼CoolFreezing(云翔火影)回复于 2003-08-02 16:19:07 得分 0
没有人会了吗? 大家帮忙啊!Top
2 楼skywalking(突然想起你)回复于 2003-08-02 17:11:45 得分 0
如果是写的标准com是不需要lib的,com中的接口是用标准标记语言idl描述的,在编译的时候
是以资源的形式连接到dll或exe中去了的!ms提供了一个解析器可以自动生成对应语言的头文件
就在windows的目录下,如果使用ide环境都可以通过注册信息自动生成的!
Top
3 楼CoolFreezing(云翔火影)回复于 2003-08-02 20:13:11 得分 0
迷茫ing....
具体点,或明确点告诉我方法,方法,方法,行吗?Top
4 楼microran2000(什么时候才能看到星星?)回复于 2003-08-02 20:20:53 得分 0
#import "xxxx.dll"
using namespace xxxx;
使用编译器支持预指令即可.
Top
5 楼CoolFreezing(云翔火影)回复于 2003-08-02 21:59:01 得分 0
为什么编译出错?
我的那个组件DLL为HelloWord.dll
我按楼上所说,通过加入如下语句来实现
#import "./debug/HelloWord.dll"
using namespace HelloWord;
编译器报错:
Compiling...
ClientDlg.cpp
F:\Temp\COM\Client\ClientDlg.cpp(11) : error C2871: 'HelloWord' : does not exist or is not a namespace
F:\Temp\COM\Client\ClientDlg.cpp(182) : error C2065: 'IHello' : undeclared identifier
F:\Temp\COM\Client\ClientDlg.cpp(182) : error C2065: 'pIHello' : undeclared identifier
F:\Temp\COM\Client\ClientDlg.cpp(182) : error C2106: '=' : left operand must be l-value
F:\Temp\COM\Client\ClientDlg.cpp(183) : error C2065: 'CLSID_Hello' : undeclared identifier
F:\Temp\COM\Client\ClientDlg.cpp(186) : error C2065: 'IID_IHello' : undeclared identifier
F:\Temp\COM\Client\ClientDlg.cpp(191) : error C2227: left of '->HelloWorld' must point to class/struct/union
F:\Temp\COM\Client\ClientDlg.cpp(192) : error C2227: left of '->Release' must point to class/struct/unionTop
6 楼CoolFreezing(云翔火影)回复于 2003-08-03 10:14:23 得分 0
为什么呀?Top
7 楼lanhuaiyu(激情万岁!)回复于 2003-08-03 11:31:38 得分 20
可以不使用名字空间
#import "../debug/HelloWord.dll" no_namespace ...
#import "../debug/HelloWord.TLB" no_namespace ...
在导入之前需要注册组件;
cmd:
REGSVR32 "../debug/HelloWord.dll"
Top
8 楼lanhuaiyu(激情万岁!)回复于 2003-08-03 11:36:15 得分 0
对了如果你用过ADO的话,可以仿照它的方法来操作;导入类型库后可以使用只能指针;特别方便;但是记住一定要注册组件。
导入成功后会生成两个文件*.tlh,*.tli这两个文件里面包含组件接口的IID和一些其它信息;Top
9 楼CoolFreezing(云翔火影)回复于 2003-08-03 13:41:53 得分 0
揭贴Top




