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

📄 subject_58550.htm

📁 vc
💻 HTM
字号:
<p>
序号:58550 发表者:编程浪子++ 发表日期:2003-11-01 21:28:32
<br>主题:com 组件为什么不能够成功注册?
<br>内容:我想写一个注册com 组件(123.dll)的程序,运行没有错误,但就是不能够注册成功,怎么回事?下面是代码:<BR>#include&lt;windows.h&gt;<BR>#include&lt;iostream&gt;<BR>using namespace std;<BR>void main()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;HINSTANCE h=::LoadLibrary(&#34;D:\\VC\\MSDev98\\MyProjects\\123\\Debug\\123.dll&#34;); <BR>&nbsp;&nbsp;&nbsp;&nbsp;if(h)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef int (*PFN)();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PFN pfn;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(FARPROC*)&amp;pfn=::GetProcAddress(h,&#34;DllRegisterServer&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(pfn)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;(*pfn)();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;&#34;GetProcAddress error&#34;&lt;&lt;endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::FreeLibrary(h); <BR>&nbsp;&nbsp;&nbsp;&nbsp;}else<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;&#34;LoadLibrary(\&#34;123.dll\&#34;) error&#34;&lt;&lt;endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>}<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:wjb 回复日期:2003-11-01 21:36:02
<br>内容:COM不是这样使用的。<BR>这是动态连接库dll的使用方法。<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>
回复者:xiongli 回复日期:2003-11-02 09:59:51
<br>内容:运行<BR>register32 123.dll<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>
回复者:编程浪子++ 回复日期:2003-11-02 19:33:24
<br>内容:&lt;BLOCKQUOTE&gt;引用“第1楼”所言<BR>&lt;Q&gt;COM不是这样使用的。&nbsp;&nbsp;这是动态连接库dll的使用方法。&lt;/Q&gt;&lt;/BLOCKQUOTE&gt;<BR>我不是使用COM,而是想写一个注册程序,来注册COM
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wjb 回复日期:2003-11-02 19:36:54
<br>内容:注册使用:<BR><BR>regsvr32 123.dll
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:编程浪子++ 回复日期:2003-11-02 19:36:56
<br>内容:&lt;BLOCKQUOTE&gt;引用“第2楼”所言<BR>&lt;Q&gt;运行&nbsp;&nbsp;register32 123.dll&nbsp;&nbsp;看看&lt;/Q&gt;&lt;/BLOCKQUOTE&gt;<BR>目标就是写一个类似于register32的程序
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wjb 回复日期:2003-11-02 19:49:19
<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>
回复者:icywind 回复日期:2003-11-03 13:33:30
<br>内容:可否跟踪一下,看(*pfn)()是否执行,如果执行了,那应该就是dll自身的问题了,换一个dll再测试一下。如果没有成功,看pfn是否得到了正确的地址。<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>
回复者:编程浪子++ 回复日期:2003-11-04 15:26:39
<br>内容:&lt;BLOCKQUOTE&gt;引用“第6楼”所言<BR>&lt;Q&gt;可以在程序中执行的注册命令,效果是一样的。&lt;/Q&gt;&lt;/BLOCKQUOTE&gt;<BR>我没有明白你的意思,是不是 在程序中调用Register32.exe?<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>
回复者:编程浪子++ 回复日期:2003-11-04 15:34:59
<br>内容:&lt;BLOCKQUOTE&gt;引用“第7楼”所言<BR>&lt;Q&gt;可否跟踪一下,看(*pfn)()是否执行,如果执行了,那应该就是dll自身的问题了,换一个dll再测试一下。如果没有成功,看pfn是否得到了正确的地址。&lt;/Q&gt;&lt;/BLOCKQUOTE&gt;<BR>1,(*pfn)()已经执行,只是返回值为0,也就是不能够成功注册<BR>2,dll自身也没为题,因为可以用register32正常注册
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:wjb 回复日期:2003-11-04 15:55:38
<br>内容:String s=&#34;regsvr32 123.dll /s&#34;;<BR>WinExec(s,SW_HIDE);<BR><BR>regsvr32.exe在每个机器上都有的。<BR>一般没有问题。<BR><BR>如果真的想自己处理,可以看一下Activ&amp;eX Control Test Container的源代码。MSDN中有,工程名tstcon<BR><BR>下面是tstcon中的注册代码:<BR><BR>static void RegisterServer( LPCTSTR pszPathName )<BR>{<BR>&nbsp;&nbsp; HINSTANCE hLibrary;<BR>&nbsp;&nbsp; PDLLREGISTERSERVER pDllRegisterServer;<BR>&nbsp;&nbsp; HRESULT hResult;<BR><BR>&nbsp;&nbsp; TCTrace( TRACELEVEL_NORMAL, &#34;Registering %s\n&#34;, pszPathName );<BR>&nbsp;&nbsp; hLibrary = LoadLibrary( pszPathName );<BR>&nbsp;&nbsp; if( hLibrary == NULL )<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCTrace( TRACELEVEL_NORMAL, &#34;Failed to load library %s.\n&#34;,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pszPathName );<BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp; else<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDllRegisterServer = PDLLREGISTERSERVER( GetProcAddress( hLibrary, _T(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#34;DllRegisterServer&#34; ) ) );<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( pDllRegisterServer == NULL )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCTrace( TRACELEVEL_NORMAL,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;Failed to get address of DllRegisterServer.\n&#34; );<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hResult = pDllRegisterServer();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( FAILED( hResult ) )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCTrace( TRACELEVEL_NORMAL,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#34;DllRegisterServer failed hResult = 0x%x.\n&#34;, hResult <BR><BR>);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeLibrary( hLibrary );<BR>&nbsp;&nbsp; }<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>
回复者:编程浪子++ 回复日期:2003-11-04 20:10:18
<br>内容:非常感谢!!!<BR>一、<BR>String s=&#34;regsvr32 123.dll /s&#34;;<BR>WinExec(s,SW_HIDE);<BR>已经可以执行,还有我找到<BR>String s=&#34;regsvr32 123.dll /s&#34;;<BR>_popen( s,&#34;rt&#34; );&nbsp;&nbsp;<BR>也能执行,这两者之间的区别(这是题外话了)<BR><BR>二、<BR>你给出的第二种方法给出的函数不能编译,包含#include&lt;windows.h&gt;不行,支持MFC也不行,请问要包含什么头文件?<BR><BR><BR>&nbsp;&nbsp;
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wjb 回复日期:2003-11-04 20:32:38
<br>内容:1. _popen是管道(Pipe)的,最好不用。<BR>2.后面的例子是摘的,需要包含其他。最好直接看下源程序tstcon。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:yewei 回复日期:2003-11-10 15:31:24
<br>内容:还有一个方法,当你无法重新编译的时候,可以直接编写注册文件<BR>REGEDIT4<BR>;<BR>; REGISTRATION FOR CAID DLL<BR>;<BR><BR>[HKEY_CLASSES_ROOT\CLSID\(组件ID){B08A1671-E45E-48E8-9912-EA06994D62C5}\Name]<BR>@=&#34;colorboard&#34;<BR><BR>[HKEY_CLASSES_ROOT\CLSID\{B08A1671-E45E-48E8-9912-EA06994D62C5}\InprocServer32]<BR>@=&#34;存放路径&#34;<BR><BR>[HKEY_CLASSES_ROOT\CLSID\{B08A1671-E45E-48E8-9912-EA06994D62C5}\ProgID]<BR>@=&#34;ColorPalette.ColorBoard.1&#34;<BR><BR>[HKEY_CLASSES_ROOT\CLSID\{B08A1671-E45E-48E8-9912-EA06994D62C5}\TypeLib]<BR>@=&#34;158BF118-A0BC-4D9F-9015-93DEAB27B301&#34;<BR><BR>[HKEY_CLASSES_ROOT\CLSID\{B08A1671-E45E-48E8-9912-EA06994D62C5}\Version]<BR>@=&#34;0.0&#34;<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>
回复者:dfgsdfg 回复日期:2003-11-21 00:27:17
<br>内容:要写一个注册的程序?太简单了<BR>MSDN带一个例子,叫register<BR>你到MSDN的SAMPLES里搜一下就能找到。
<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 + -