社区
ATL
帖子详情
进程外服务器
xuxian02092213
2009-11-01 08:59:16
我看了《ATL开发指南》第四章的源代码,发现应用程序编译时自动运行应用程序,并注册了组件,我在注册表中组件的相应信息,这个在VC中时如何设置,我并不清楚,还有更重要的就是,我使用客户端程序,一调用CoCreateInstance(CLSID_Math,NULL,CLSCTX_LOCAL_SERVER,IID_IMath,(void**) &pMath );后,服务器端应用程序立即退出,自然,客户端出现错误,无法继续运行下去,不知道那位能帮助在下。不胜感激
...全文
85
12
打赏
收藏
进程外服务器
我看了《ATL开发指南》第四章的源代码,发现应用程序编译时自动运行应用程序,并注册了组件,我在注册表中组件的相应信息,这个在VC中时如何设置,我并不清楚,还有更重要的就是,我使用客户端程序,一调用CoCreateInstance(CLSID_Math,NULL,CLSCTX_LOCAL_SERVER,IID_IMath,(void**) &pMath );后,服务器端应用程序立即退出,自然,客户端出现错误,无法继续运行下去,不知道那位能帮助在下。不胜感激
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zoulie
2009-11-05
打赏
举报
回复
分就一个字,我只说一次
jameshooo
2009-11-04
打赏
举报
回复
只为抢分上来
雪影
2009-11-04
打赏
举报
回复
源代码也给你传上来了
http://download.csdn.net/source/1792728
[Quote=引用 9 楼 wshcdr 的回复:]
膜拜楼上啊
[/Quote]
^_^,抢分哦
wshcdr
2009-11-04
打赏
举报
回复
膜拜楼上啊
雪影
2009-11-04
打赏
举报
回复
代理存根DLL的创建 :
1.通过MIDL编译器自动生成 projectXX.h,dlldata.c,projectXX_i.c,projectXX_p.c文件
对于vc6.0,在文件视图(FileView)树形栏中,找到接口定义的idl文件,点击右键,单击setting,在Custom Build选项卡中输入一下信息.
Description:
Compiling Interface Definition
Build Commands:
midl.exe /ms_ext /char unsigned /c_ext /out "$(InputDir)"
"$(InputPath)"
Output File(s):
$(InputDir)\$(InputName).h
$(InputDir)\dlldata.c
$(InputDir)\$(InputName)_i.c
$(InputDir)\$(InputName)_p.c
2.设置完后,在idl文件处,再次点击右键选择编译projectXX.idl文件.
做完这一步之后,在项目文件夹下面我们会找到上述的四个文件.
3.在新的项目工作区或现有的工作区中,创建一个态链接库项目.将前面的四个文件添加到该项目之中.
并新建一个PSProjectXX.def文件.输入一下内容,保存后添加到项目之中.
LIBRARY PSProjectXX
DESCRIPTION 'Sample custom interface marshaler'
EXPORTS
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
4. 打开project->setting,然后选择您的项目,单击c + + 选项卡并添加到预处理器定义字段的值REGISTER_PROXY_DLL以及_win32_winnt=0x400;
在link选项卡的Genernal->Object/library modules栏中添加一下类库:rpcndr.lib rpcns4.lib rpcrt4.lib
5. 在项目属性 (或设置) 的自定义生成步骤部分中键入下列值,然后关闭生成设置对话框:
Description:
Registering Custom Interface Marshaler
Build Command(s):
regsvr32 /s /c "$(TargetPath)"
echo regsvr32 exe. time > "$(OutDir)\regsvr32.trg"
Output File(s):
$(OutDir)\regsvr32.trg
6.编译,搞定.
需要代码的话,老规矩,留下email
雪影
2009-11-02
打赏
举报
回复
但是你使用pUnk接口查询IMath接口或者其他接口都会返回80004002错误,表示不支持接口错误。
具体出错的原因就不深究了,你自己研究吧,
雪影
2009-11-02
打赏
举报
回复
刚看了一下代码,CoCreateInstance返回的错误代码是80004002,表示支持IMath接口。
另外使用的是智能指针,智能指针析构时会调用Release,从而使COM组件的计数降为0,最终导致进程外服务器退出。
你可以测试一下,使用CoCreateInstance(CLSID_Math,NULL,CLSCTX_LOCAL_SERVER,
IID_IUnknown
,(void**) &pUnk);
这样进程外服务器应该不会退出。
jeff_5388
2009-11-01
打赏
举报
回复
单步跟一下服务器吧。
jeff_5388
2009-11-01
打赏
举报
回复
[Quote=引用 1 楼 tr0j4n 的回复:]
当我们使用 ATL 编写组件程序,注册不用我们来负责。编译成功后,IDE 会帮我们自动注册
[/Quote]
应用程序最终是要布署到目标机器上去的,必需要注册。
jameshooo
2009-11-01
打赏
举报
回复
注册信息在RGS后缀的文件中,是一种简写模式,可以用变量,这些变量在被注册时自动替换成运行时的值。
服务器退出,说明服务器代码有问题,自己调试一下。
oyljerry
2009-11-01
打赏
举报
回复
注册是VC中自动设置的,也可以自己通过Regsvr32命令来注册,反注册ATL组件
2.服务器退出,可以在服务器的运行代码中自己调试一下
MoXiaoRab
2009-11-01
打赏
举报
回复
当我们使用 ATL 编写组件程序,注册不用我们来负责。编译成功后,IDE 会帮我们自动注册
linux多
进程
和网络编程---ftp
服务器
实战
文件读写效率,多
进程
与僵尸,信号合并,多线程读写锁同步,高并发服务端,select多路复用 并以3000行ftp开源
服务器
剖析,巩固知识 linux基础编程 linux网络编程 ftpServer开源项目之源码解析 更多课程相关内容请...
启动COM组件的三种机制
这里的COM组件可以是一个
进程
内
服务器
(In-Process Server),也可以是一个
进程
外
服务器
(Out-Of-Process Server)。一般情况下,我们在使用这些COM组件的时候,只要保证COM是正确注册了,根本不用关心DLL是怎么被load...
Oracle 用户
进程
和
服务器
进程
主要介绍一下用户
进程
、
服务器
进程
及PGA 1.用户
进程
(或称客户
进程
) 是指用户到Oracle数据库
服务器
的链接,...
服务器
进程
除了Oracle的后台
进程
外
,还有一些
进程
是代表用户的,称为
服务器
进程
。这些
服务器
进程
服务器
清理死掉的
进程
服务器
清理死掉的
进程
在
服务器
上跑程序突然发现GPU占用了 先用 nvidia-smi 看一下是什么
进程
占用了,发现里面并没有显示 那应该是有之前跑的网络程序死掉了,没清理干净,查看一下占用情况: ps aux 会出现这样...
查看
服务器
所有
进程
信息,怎么查看
服务器
上的所有
进程
怎么查看
服务器
上的所有
进程
内容精选换一换远程登录
服务器
出现蓝屏或黑屏,可能是由于explorer.exe
进程
异常导致的桌面无法显示。这是由于Windows
服务器
的explorer.exe
进程
异常导致的。explorer.exe是Windows程序...
ATL
3,245
社区成员
48,537
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章