在VC环境上,怎么不用ATL向导,开发进程外COM服务器EXE程序
在VC环境下,如何不用ATL向导,开发进程外COM服务器EXE程序
RT
------解决方案--------------------
com是规范, 用win32都能开发, atl只是一个辅助库而已
------解决方案--------------------
COM技术内幕
------解决方案--------------------
基本上和进程内服务器没有多大区别,主要是组件对象的注册问题,
在进程内服务器中,我们通过导出DllRegisterServer/DllUnregisterServer来注册我们的组件,注册时是靠regsvr32.exe 来调用这两个函数来完成注册拆卸。
在进程外服务器中,注册是靠命令参数来完成,YourServerApp.exe /regserver 时 完成我们的注册,其实在内部都是一样的,大致的程序结构如下:
int _stdcall WinMain(...)
{
//处理命令行
如果是regserver 注册,然后退出
如果是unregserver 拆卸,然后退出
CoRegisterClassObjects()//注册类对象
// 消息循环
while(GetMessage(&msg,NULL,0,0) > 0)
{
//...
}
CoRevokeClassObjects()
}
什么时候消息循环结束呢?当客户完全释放组件时,服务器有WM_QUIT消息raise,最后进程退出。
RT
------解决方案--------------------
com是规范, 用win32都能开发, atl只是一个辅助库而已
------解决方案--------------------
COM技术内幕
------解决方案--------------------
基本上和进程内服务器没有多大区别,主要是组件对象的注册问题,
在进程内服务器中,我们通过导出DllRegisterServer/DllUnregisterServer来注册我们的组件,注册时是靠regsvr32.exe 来调用这两个函数来完成注册拆卸。
在进程外服务器中,注册是靠命令参数来完成,YourServerApp.exe /regserver 时 完成我们的注册,其实在内部都是一样的,大致的程序结构如下:
int _stdcall WinMain(...)
{
//处理命令行
如果是regserver 注册,然后退出
如果是unregserver 拆卸,然后退出
CoRegisterClassObjects()//注册类对象
// 消息循环
while(GetMessage(&msg,NULL,0,0) > 0)
{
//...
}
CoRevokeClassObjects()
}
什么时候消息循环结束呢?当客户完全释放组件时,服务器有WM_QUIT消息raise,最后进程退出。