📄 subject_64166.htm
字号:
<p>
序号:64166 发表者:mildse7en 发表日期:2003-12-09 11:15:25
<br>主题:如果想在自己的c++程序里面使用机器上已经注册的一个组件,怎样才能找到该组件的头文件?
<br>内容:<BR> <BR>如果在自己的VC++程序里面使用机器上已经注册的一个组件,比如AVI组件avifi32.dll,如何得到该组件的头文件呢,如没有头文件,我的程序应该怎样引入该DLL,才能正确编译呢? 谢谢!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:michael 回复日期:2003-12-09 11:56:36
<br>内容: 注册的com组件和普通的dll不一样。根本就没有什么头文件让您include。关于接口定义信息是保存在.tlb文件里面。由于com具有自含性所以在com本身里面也有接口定义信息。<BR>引用的时候用#import"*.tlb"或者#import"*.dll"。VC会帮您生成.tlh文件,那里面有文本的接口定义信息。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:mildse7en 回复日期:2003-12-09 16:48:00
<br>内容:谢谢您的回答,还想继续请教一下:<BR>在文件内该如何声明想使用的接口呢?<BR>举个例子,像使用机器里面某目录下的组件“Hello.dll”,通过OLEVIEW了解到该组件有一个IGreet接口,继承自IDispatch;<BR>那么我在程序里面想使用IGreet接口,在加入了#import "C:/...../hello.dll"语句之后,该如何声明IGreet,才能以以下方式得到该接口的指针呢? <BR>IGreet *pIgreet=NULL;<BR>HRESULT hr = ::CoCreateInstance(CLSID_Component1,<BR> NULL, <BR> CLSCTX_INPROC_SERVER,<BR> IID_Igreet, <BR> (void**)&pIgreet) ;<BR><BR>谢谢!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:mildse7en 回复日期:2003-12-09 18:00:26
<br>内容:下面是我的方法,但编译的时候提示IGreet为无法识别的外部变量,到底该如何声明这个接口呢:<BR><BR><BR>#include "stdafx.h"<BR>#include <objbase.h><BR>#include <unknwn.h><BR>#include <iostream><BR>#import "C:/....../hello.dll"<BR><BR><BR>//根据OLeview得到GUID<BR>const IID IID_IGreet = {0x78C3F35D,0x3B85,0x11D3,0x90,0x38,0x00,0x10,0x5A,0xA4,0x5B,0xDC} ;<BR>const CLSID CLSID_Component1 ={0x78C3F351,0x3B85,0x11D3,0x90,0x38,0x00,0x10,0x5A,0xA4,0x5B,0xDC} ;<BR><BR>//下面这句编译提示无法通过<BR>Interface IGreet;<BR><BR>int _tmain(int argc, _TCHAR* argv[])<BR>{<BR> char name[140]="C:/..../hello.dll";<BR> HINSTANCE hComponent = ::LoadLibrary(name) ;<BR> if (hComponent == NULL)<BR> {<BR> std::cout << "CallCreateInstance:\tError: Cannot load component." << "\n" ;<BR> return NULL ;<BR> }<BR> <BR> CoInitialize(NULL);<BR> IGreet *pIgreet=NULL;<BR> HRESULT hr = ::CoCreateInstance(CLSID_Component1,<BR> NULL, <BR> CLSCTX_INPROC_SERVER,<BR> IID_IGreet, <BR> (void**)&pIgreet) ;<BR><BR> return 0;<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:michael 回复日期:2003-12-09 18:28:49
<br>内容: 是不是编译器报告接口IID_IGreet没定义呀?<BR> 要是这样的话,请在#import""后面加上named_guids<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:mildse7en 回复日期:2003-12-09 21:17:40
<br>内容:Sorry,可以了。问题出在应该用小写的interface而不是Interface。现在可以编译通过了,谢谢micheal!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:michael 回复日期:2003-12-09 21:23:39
<br>内容:老大,我的名字是michael不是micheal
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -