在代码里注册COM组件,相对于regsvr32有自己的优点,可控,隐蔽性好。这里将msdn的示例修改了下:
需要注意的有两点:
- Ole环境的初始化和释放;
- GetProcAddress中的函数名称,这里需要取得函数地址,所以函数名大小写...不能写成DllUnRegisterServer

HRESULT hr = OleInitialize(NULL);
<span style="white-space:pre"> </span><pre name="code" class="html"><span style="white-space:pre"> </span>int iError; HINSTANCE hLib = LoadLibrary(_T("XXX.dll"));if (hLib < (HINSTANCE)HINSTANCE_ERROR){iError = GetlastError();
<span style="white-space:pre"> </span>return iError<span style="font-family: Arial, Helvetica, sans-serif;">;</span>
}
// 注册
FARPROC lpDllEntryPoint = GetProcAddress(hLib,"DllRegisterServer");
FARPROC lpDllEntryPoint = GetProcAddress(hLib,"DllUnregisterServer");
if (lpDllEntryPoint != NULL)
(*lpDllEntryPoint)();
else
<span style="font-family: Arial, Helvetica, sans-serif;">{</span><pre name="code" class="html"> iError = GetlastError();<span> </span>return iError<span style="font-family: Arial, Helvetica, sans-serif;">;</span>
} ::FreeLibrary(hLib);OleUninitialize();
本文介绍了一种通过代码而非regsvr32注册COM组件的方法,这种方法更具可控性和隐蔽性。文章提供了具体步骤及注意事项,包括Ole环境的初始化与释放、GetProcAddress中获取正确函数地址等。
166

被折叠的 条评论
为什么被折叠?



