⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_64166.htm

📁 vc
💻 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>内容:&nbsp;&nbsp;&nbsp;&nbsp;注册的com组件和普通的dll不一样。根本就没有什么头文件让您include。关于接口定义信息是保存在.tlb文件里面。由于com具有自含性所以在com本身里面也有接口定义信息。<BR>引用的时候用#import&#34;*.tlb&#34;或者#import&#34;*.dll&#34;。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 &#34;C:/...../hello.dll&#34;语句之后,该如何声明IGreet,才能以以下方式得到该接口的指针呢? <BR>IGreet *pIgreet=NULL;<BR>HRESULT hr = ::CoCreateInstance(CLSID_Component1,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLSCTX_INPROC_SERVER,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IID_Igreet, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(void**)&amp;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 &#34;stdafx.h&#34;<BR>#include &lt;objbase.h&gt;<BR>#include &lt;unknwn.h&gt;<BR>#include &lt;iostream&gt;<BR>#import &#34;C:/....../hello.dll&#34;<BR><BR><BR>//根据OLeview得到GUID<BR>const IID IID_IGreet =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {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>&nbsp;&nbsp;&nbsp;&nbsp;char name[140]=&#34;C:/..../hello.dll&#34;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;HINSTANCE hComponent = ::LoadLibrary(name) ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (hComponent == NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout &lt;&lt; &#34;CallCreateInstance:\tError: Cannot load component.&#34; &lt;&lt; &#34;\n&#34; ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return NULL ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CoInitialize(NULL);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IGreet *pIgreet=NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;HRESULT hr = ::CoCreateInstance(CLSID_Component1,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLSCTX_INPROC_SERVER,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IID_IGreet, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(void**)&amp;pIgreet) ;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;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>内容:&nbsp;&nbsp; 是不是编译器报告接口IID_IGreet没定义呀?<BR>&nbsp;&nbsp;要是这样的话,请在#import&#34;&#34;后面加上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 + -