这是我的问题还是微软的问题?COM高手请过来

yangmajituipo 2001-09-17 03:49:51
在网上发布分布式DLL服务组件时
客户端是否还保留一个服务段的组件并注册。
有没有不需要DLL的方法,只在注册表保留接口定义
(采用类型库调度,派生于IUnknown (oleautomation)的自定义接口,是否缺了DLL就没法调度了,为什么?我的组件是在远程运行的呀???)
...全文
115 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
XT2 2001-09-18
  • 打赏
  • 举报
回复
rgs file is only a helper, what COM need is registry key here, if you cannot use rgs file, just write your own code for CLSID,APPID, Interface is ok.

register a type library will also write Inerface info in registry for oleautomation/dual interface for you.
xiaowh 2001-09-18
  • 打赏
  • 举报
回复
还是不明白,用VB的话根本就没有.reg文件,只有VBR文件,而且在VB中也无法“把.tlb文件包含在client.exe中重新编译”,不懂不懂还不懂!!!
yangmajituipo 2001-09-18
  • 打赏
  • 举报
回复
非常感谢,我已经搞定了
acptvc 2001-09-18
  • 打赏
  • 举报
回复
感谢您使用微软产品。
0x80029c4a(TYPE_E_CANTLOADLIBRARY )表示com runtime不能正确装载typelib。
如果你想全部都手工作的话,建议采用如下步骤:
1.执行.rgs文件注册server实现的interfaces.(也可通过注册Server DLL而后删除该dll达到).
2.使用oleview.exe/regedit修改注册表让server dll指向远端机器
3.注册.tlb 文件 regsvr32 c:\abc\mytlb.tlb

如果你把.tlb文件包含在client.exe中重新编译,那么在编译完后要对该exe中的.tlb进行注册,告诉com runtime在哪里找到.tlb。
比如下面的语句是从mfa.exe的资源3中装载.tlb文件。
ITypeLib *ptlib;
LoadTypeLib("C:\\MONTANA\\EXE\\MFA.EXE\\3", &ptlib)

通常建议调用RegisterTypeLib来注册包含在exe中的tlb.

微软亚洲技术中心 VC技术支持

本贴子仅供CSDN的用户作为参考信息使用。其内容不具备任何法律保障。您需要考虑到并承担使用此信息可能带来的风险。具体事项可参见使用条款 (http://www.csdn.net/microsoft/terms.shtm)。
XT2 2001-09-18
  • 打赏
  • 举报
回复
registering typelib will give all the necessary interface information to automation marshaler, however you still need some other registry keys

1. CLSID--associate CLSID with interface and APPID
2. APPID- let COM find remote server

So you can register typelib by some existing tools (if you can find), or by following functions:
LoadTypeLib
RegisterTypeLib
Besides you need register CLSID/APPID, you can write your own code to do this or copy rgs file from server side and leverage on ATL's code to do it.
yangmajituipo 2001-09-17
  • 打赏
  • 举报
回复
非常感谢
不知道如何发布
我是这样做的,将能运行DCOM,保留了Server Dll的客户端
1。将 .tlb包含在 Client exe中重新编译
2。删去Server DLL
但返回0x80029c4a(TYPE_E_CANTLOADLIBRARY )错误

到底如何发布呢
acptvc 2001-09-17
  • 打赏
  • 举报
回复
感谢您使用微软产品。
回答这个问题前应该搞清楚你的dcom所使用的marshaler. 大多数程序员常用的marshaler有两种:/Oicf marshaler (也叫standard marshaler), automation marshaler (也叫typelib marshaler, universal marshaler). 从理论上来说,不管使用哪种marshaler,com runtime 都不需要客户端保留一个服务端的dll。以下是使用这两种marshaler时候com runtime需要的信息:
1. /Oicf marshaler
Clients: 注册通过midl.exe 和VC 编译器生成的proxy/stub dll; 注册你的com server所实现的接口(通常使用一个.rgs文件)
Server: register your com server DLL and proxy/stub dll
2. Universal marshaler
clients: register the .tlb;注册你的com server所实现的接口(通常使用一个.rgs文件)
server: register your com server DLL and .tlb

以上是标准的方法,但在具体的发布的时候,往往把.tlb文件和.rgs文件作为资源合到dll中,这样的话在客户端就需要保留一个server DLL. 因为com runtime在运行的时候需要.tlb文件来动态创建proxy/stub,而这个.tlb文件是含在dll中的。

如果你不想在客户端保留server dll, 建议把(tlb + .rgs)文件和dll分开发布.

微软亚洲技术中心 VC技术支持

本贴子仅供CSDN的用户作为参考信息使用。其内容不具备任何法律保障。您需要考虑到并承担使用此信息可能带来的风险。具体事项可参见使用条款 (http://www.csdn.net/microsoft/terms.shtm)。
本工具多次测试均未出现问题,可以使用,如果发现自己无法使用,先看下面介绍与说明 谢谢!! 感谢驴友yxrsys,在verycd发布资源 非安装软件,直接双击运行,傻瓜式修复,可运行于32位和64位系统和WINPE系统 程序根据当前系统non-Unicode设置自动显示中/英界面 "自动修复"自动判断和系统启动有关的条件并自动修复程序支持的盘符上的NT系统启动,无需用户手工干预 "高级修复"只供特殊需要的朋友,参看下面应用实例中的高级修复部分 PE中自动判断PE环境,单硬盘可以直接"自动修复",如多硬盘在PE中修复时推荐使用"高级"修复选择你作为系统引导的盘符 适用范围: -------- 1.启动菜单/启动文件丢失修复: 适用所有NT5.x(2000/XP/2003)和NT6.x(Vista/2008/Win7/2008r2) 2.修复其他因BCD相关引起的故障 a. Win7/2008r2中 BCD 的修复计算机(Windows Recovery Environment)菜单丢失 b. Win7/2008r2中 BCD 引起的3D启动画面丢失(变成VISTA滚动条启动画面) c. BCD 引起的启动菜单选择界面乱码现象 3.系统BCD非法的强制修复 - 现象:Vista/2008/Win7/2008r2中 a. 运行msconfig后"启动"或"引导"栏空白 b. 管理员身份运行命令提示符中后运行bcdedit等和BCD相关的操作提示出错 c. 系统属性的"启动和故障恢复"窗口无法配置"默认操作系统"和"等待时间" d. 其他软件无法添加/删除/修改基于 BCD 管理的新启动菜单 注: 3的这种情况是否要强制修复自行决定。 额外功能: 为VISTA/2008添加修复计算机(Windows Recovery Environment)菜单 使用方法:在系统盘符中新建recovery文件夹,再把光盘或安装程序中的boot\boot.sdi和sources\boot.wim复制至 recovery文件夹,再运行本程序,即可自动添加。 修复效果: 存在原BCD或Boot.ini时程序将予备份,备份文件名/路径在修复完成后给出提示 NT5.x菜单在boot.ini中以"Microsoft Windows Server 2003 x86"形式存在 NT6.x菜单在BCD中以"Windows Server ® 2008 Standard x86"形式存在 NT6.x的修复过程提示成功即时写入生效,NT5.x的修复在最后完成后再一并写入生效 NT5.x支持最多同接8个硬盘时的修复,但如果不同接口硬盘混用且三个或以上硬盘就未必能准确判断硬盘号,三硬盘以上 并混用的情况就算微软自己的控制台都未必能准确判断 NT6.x理论无限制硬盘数,也不限制混用 根据当前系统non-Unicode设置决定修复后的启动菜单中/英优先级 NT5.x+NT6.x的多系统中 - 当存在多个NT5.x时,修复后BCD显示的NT5.x相应菜单为“Earlier Version of Windows”, 当只有一个NT5.x系统,修复后BCD中显示的NT5.x相应菜单则为类如"Microsoft Windows Server 2003 x86"格式 不修复NT5.x的Boot.ini和NT6.x的BCD中的多余的启动菜单 因为精简版的精简程度无从判断,所以不保证能修复精简版系统启动故障 自BCDautofix发布以来极少回答一些朋友在使用上的疑问,这里和NTBOOTautofix一并释疑 一、BUG报告:readme中写的邮箱我极少打开,所以未必能及时回信。 二、不要拿本工具和EasyBCD或VistaBoorPro等工具作比较: 那类工具重在管理 - 如改启动菜单名,添加/删除菜单等,要用在修复功能上需要使用者自己了解故障原因和解决流程后 才能手工修复,多数情况下其手工也无法完美修复。 而本工具重在修复,修复功能大多是那类工具无法实现的,当然本工具也不能实现那类工具的管理操作。 三、程序用批处理编写:看不起批处理的免下载使用而避免下载后浪费诸多表情 四、如不能修复自己先了解一下是否程序适用范围内:例如有些硬件原因引起的3D启动画面不存在,象这类的非BCD引起的类似故障是此工具无法处理的 五、手工处理教程为什么不写:其实以前曾经写过很多,但并不多人看,有时一个“活动分区”的识别就要大花唇舌说明,一句bcdedit /set {ntldr} description "Microsoft Windows XP"或bootsect /nt60 sys可以解决的手工处理方式不少人都

3,245

社区成员

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

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