当你使用visual studio 2005去开发MFC ACTIVEX控件的话,会碰到一些非常奇怪的事情,你会发现编译完成后部署到POCKET PC设备上去的时候发现不能调用。由于是嵌入式软件的开发,同桌面软件开发有点不同,因此在调试过程中比桌面开发复杂一点。
为了简单测试自己开发的控件是否能正常的使用,你可以利用POCKET PC 上的IE浏览器作为你的测试工具,简单而且方便。
第一步:在visual studio 2005上,选择智能MFC ACTIVEX项目然后根据默认设置新建一个ACTIVEX的控件,微软的默认控件会生成一个椭圆形状的图形。
第二步:用记事本写一段JAVASCRIPT 脚本,保存为test.htm,把文件拷贝到POCEKET PC 的设备上。
<script language="javascript">
var obj=new ActiveXobject(“你开发控件的名字”);
if (obj=null )
alert("控件调用成功");
else
alert("控件调用失败");
</script>
第三步:在visual studio 2005上点击生成和部署,visual studio 2005会把你的控件部署到智能设备中。然后用浏览器浏览test.htm,你会发现浏览器上没有椭圆形状的图形,而且系统也没有报什么错误信息。用remote registry editor查看智能设备的注册表,发现你的控件根本没有在注册表中注册。所以在浏览器中没有显示椭圆形状的图像。同样的我用ATL编写控件,然后生成和部署,则在智能设备中能注册控件。
如何让MFC开发的控件能注册上去呢?只能采用老办法用自己编写代码注册。你可以生成一个智能设备的程序然后写上下面一段注册代码,这样你的控件就注册到设备中去了。
注册控件的代码
HMODULE hLib = ::LoadLibrary(strLib);
if(hLib == 0) {
return FALSE;
}
HRESULT (STDAPICALLTYPE *pDllRegisterServer)();
(FARPROC&)pDllRegisterServer = ::GetProcAddress(hLib, _T("DllRegisterServer"));
if(pDllRegisterServer == NULL) {
::FreeLibrary(hLib);
return FALSE;
}
if(FAILED(pDllRegisterServer ())) {
::FreeLibrary(hLib);
return FALSE;
} else {
::FreeLibrary(hLib);
return TRUE;
}
反注册控件代码
HMODULE hLib = ::LoadLibrary(strLib);
if(hLib == 0) {
return FALSE;
}
HRESULT (STDAPICALLTYPE *pDllUnregisterServer)();
(FARPROC&)pDllUnregisterServer = ::GetProcAddress(hLib, _T("DllUnregisterServer"));
if(pDllUnregisterServer == NULL) {
::FreeLibrary(hLib);
return FALSE;
}
if(FAILED(pDllUnregisterServer())) {
::FreeLibrary(hLib);
return FALSE;
} else {
::FreeLibrary(hLib);
return TRUE;
}