请教Com高手,如何将现有的程序方便地改造成com程序(谢绝灌水)

zhaowuqing 2003-03-26 11:05:10
我做了一个CTI语音卡控制的程序,因为系统要改造成B/S模式,项目经理非要把语音控制做成COM(其实完全没必要),我想请教高手如何将一个现有的exe程序很容易地改造成com,并谈一下数据共享问题,如果真心赐教,分可以再加,先谢过了
...全文
39 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaowuqing 2003-03-28
  • 打赏
  • 举报
回复
看来高手够们不屑这个问题,晚上结账:(
zhaowuqing 2003-03-27
  • 打赏
  • 举报
回复
还有高手指教么?好的思路也可以,很快结账
icansaymyabc 2003-03-26
  • 打赏
  • 举报
回复
COM 和 EXE 的结构大不一样。
重写是最佳改造方案,信不信由你。
serverclient 2003-03-26
  • 打赏
  • 举报
回复
给出个共享内存映射文件的创建代码:
它是我在上个项目中曾经用过的代码。。。
void CReadDataDoc::AllocMemBuffer()
{
OFSTRUCT of ;
// create a common disk file
memBuf.fileHandle = OpenFile(memBuf.filePathName ,
&of,
OF_CREATE | OF_READWRITE | OF_SHARE_DENY_WRITE) ;
// check whether the file is valible
if(memBuf.fileHandle == (HFILE)-1)
{
CString MsgBuf ;
MsgBuf.Format("Create memory mapping failed !") ;
MessageBox(AfxGetMainWnd()->m_hWnd,
MsgBuf,
"Memory Map Failed",
MB_OK) ;
AfxGetMainWnd()->CloseWindow () ;
}

// create memory map related to disk file
memBuf.memMapHandle = CreateFileMapping(
(HANDLE)memBuf.fileHandle,
NULL,
PAGE_READWRITE,
0,memBuf.maxBufSize,
"CG_MEMBUF") ;

// create the view object to return a file pointer
memBuf.lpDataHead = MapViewOfFile(
memBuf.memMapHandle,
FILE_MAP_READ | FILE_MAP_WRITE,
0,0,
memBuf.maxBufSize);
memset(memBuf.lpDataHead,0,memBuf.maxBufSize) ;
}

void CReadDataDoc::FreeMemBuffer()
{
if(memBuf.fileHandle != (HFILE) -1)
{
CloseHandle((HANDLE)memBuf.fileHandle ) ;
CloseHandle(memBuf.memMapHandle) ;

}
memBuf.fileHandle = (HFILE)-1 ;
}

serverclient 2003-03-26
  • 打赏
  • 举报
回复
我不是什么高手,COM也是正在研究中,个人认为可以将你的语音模块做成DCOM的形式,既然有了现成的EXE,就可以做成进程间COM了,注意要导出相应的Interface。
至于数据共享问题,我私下认为是进程间数据共享问题,可以通过开辟内存映射共享文件或者利用Socket本地机通信,或者就利用COM中的RPC协议和代理来通信也可以。。。
flywolfman 2003-03-26
  • 打赏
  • 举报
回复
COM的进程外组件本身就是一个exe文件。不同的是进程外组件必须实现自注册并对外输出一组接口。然后利用MIDL生成的代码做一个代理/存根动态库以便客户与组件能正常通讯。
但是这样生成的标准代理/存根动态库有很多缺点,其中之一就是当客户与组件不在一台计算机上时没有任何方法可以知道网络连接是否正常,当网络恢复后也无法自动恢复!如果想这样做必须自己实现代理/存根动态库。可没人知道如何自己做代理/存根动态库(至少我不知道有谁会做!:()
所以....

还是想办法说服你的经理不要这样做吧!
jeffchen 2003-03-26
  • 打赏
  • 举报
回复
通过MFC实现一个COM接口,如ICallControl。具体看看《COM原理与本质》中有关章节。
Gladstone 2003-03-26
  • 打赏
  • 举报
回复
gz
zhaowuqing 2003-03-26
  • 打赏
  • 举报
回复
重写太麻烦了,本来就不太想改,因为socket通信足以完成需求:(

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧