📄 subject_58550.htm
字号:
<p>
序号:58550 发表者:编程浪子++ 发表日期:2003-11-01 21:28:32
<br>主题:com 组件为什么不能够成功注册?
<br>内容:我想写一个注册com 组件(123.dll)的程序,运行没有错误,但就是不能够注册成功,怎么回事?下面是代码:<BR>#include<windows.h><BR>#include<iostream><BR>using namespace std;<BR>void main()<BR>{<BR> HINSTANCE h=::LoadLibrary("D:\\VC\\MSDev98\\MyProjects\\123\\Debug\\123.dll"); <BR> if(h)<BR> {<BR> typedef int (*PFN)();<BR> PFN pfn;<BR> *(FARPROC*)&pfn=::GetProcAddress(h,"DllRegisterServer");<BR> if(pfn)<BR> cout<<(*pfn)(); <BR> else<BR> cout<<"GetProcAddress error"<<endl;<BR> ::FreeLibrary(h); <BR> }else<BR> {<BR> cout<<"LoadLibrary(\"123.dll\") error"<<endl;<BR> }<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>内容:<BLOCKQUOTE>引用“第1楼”所言<BR><Q>COM不是这样使用的。 这是动态连接库dll的使用方法。</Q></BLOCKQUOTE><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>内容:<BLOCKQUOTE>引用“第2楼”所言<BR><Q>运行 register32 123.dll 看看</Q></BLOCKQUOTE><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>内容:<BLOCKQUOTE>引用“第6楼”所言<BR><Q>可以在程序中执行的注册命令,效果是一样的。</Q></BLOCKQUOTE><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>内容:<BLOCKQUOTE>引用“第7楼”所言<BR><Q>可否跟踪一下,看(*pfn)()是否执行,如果执行了,那应该就是dll自身的问题了,换一个dll再测试一下。如果没有成功,看pfn是否得到了正确的地址。</Q></BLOCKQUOTE><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="regsvr32 123.dll /s";<BR>WinExec(s,SW_HIDE);<BR><BR>regsvr32.exe在每个机器上都有的。<BR>一般没有问题。<BR><BR>如果真的想自己处理,可以看一下Activ&eX Control Test Container的源代码。MSDN中有,工程名tstcon<BR><BR>下面是tstcon中的注册代码:<BR><BR>static void RegisterServer( LPCTSTR pszPathName )<BR>{<BR> HINSTANCE hLibrary;<BR> PDLLREGISTERSERVER pDllRegisterServer;<BR> HRESULT hResult;<BR><BR> TCTrace( TRACELEVEL_NORMAL, "Registering %s\n", pszPathName );<BR> hLibrary = LoadLibrary( pszPathName );<BR> if( hLibrary == NULL )<BR> {<BR> TCTrace( TRACELEVEL_NORMAL, "Failed to load library %s.\n",<BR> pszPathName );<BR> }<BR> else<BR> {<BR> pDllRegisterServer = PDLLREGISTERSERVER( GetProcAddress( hLibrary, _T(<BR> "DllRegisterServer" ) ) );<BR> if( pDllRegisterServer == NULL )<BR> {<BR> TCTrace( TRACELEVEL_NORMAL,<BR> "Failed to get address of DllRegisterServer.\n" );<BR> }<BR> else<BR> {<BR> hResult = pDllRegisterServer();<BR> if( FAILED( hResult ) )<BR> {<BR> TCTrace( TRACELEVEL_NORMAL,<BR> "DllRegisterServer failed hResult = 0x%x.\n", hResult <BR><BR>);<BR> }<BR> }<BR> FreeLibrary( hLibrary );<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 20:10:18
<br>内容:非常感谢!!!<BR>一、<BR>String s="regsvr32 123.dll /s";<BR>WinExec(s,SW_HIDE);<BR>已经可以执行,还有我找到<BR>String s="regsvr32 123.dll /s";<BR>_popen( s,"rt" ); <BR>也能执行,这两者之间的区别(这是题外话了)<BR><BR>二、<BR>你给出的第二种方法给出的函数不能编译,包含#include<windows.h>不行,支持MFC也不行,请问要包含什么头文件?<BR><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>
回复者: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>@="colorboard"<BR><BR>[HKEY_CLASSES_ROOT\CLSID\{B08A1671-E45E-48E8-9912-EA06994D62C5}\InprocServer32]<BR>@="存放路径"<BR><BR>[HKEY_CLASSES_ROOT\CLSID\{B08A1671-E45E-48E8-9912-EA06994D62C5}\ProgID]<BR>@="ColorPalette.ColorBoard.1"<BR><BR>[HKEY_CLASSES_ROOT\CLSID\{B08A1671-E45E-48E8-9912-EA06994D62C5}\TypeLib]<BR>@="158BF118-A0BC-4D9F-9015-93DEAB27B301"<BR><BR>[HKEY_CLASSES_ROOT\CLSID\{B08A1671-E45E-48E8-9912-EA06994D62C5}\Version]<BR>@="0.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>
回复者: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 + -