免注册COM使用参考
免注册COM在使用时要使用文件清单(manifest文件),文件清单在使用时可分为两种:
1.程序清单:
指明程序包含哪些依赖组件。
C\C++的程序清单信息可在项目属性中编辑,用于自动生成。
C#的程序清单暂时没找到自动生成的办法,使用VS本身提供的清单生成工具生成的清单无法正确使用。因此只能手动编写。
2.组件清单:
指明组件(DLL)的COM相关信息,GUID等信息,基本和注册在注册表中的信息一致。
组件清单可用VS工具mt.exe来生成,具体参看MSDN。
用mt.exe时有时会需要用到tlb文件,如果是C#的COM的话,则可以用Tlbexp.exe(类型库导出程序)从DLL生成TLB文件,一般不会这样用,C#的话一般就是直接指明为托管程序集,直接从DLL组件清单。C++的COM的话,可以用从DLL嵌入的资源中获取。
使用文件清单可以通过以下几种方式:
1.嵌入,这个需要在工程属性中设置。
2.使用对应命名的清单文件。例如:
程序清单:
文件:1.exe
清单:1.exe.manifest
组件清单:
文件:1.dll
清单:1.manifest
红字部分要一致。并且请将对应的文件和清单放置在一起。
3.使用Activation Context API加载指定清单。(这个还未有研究)
使用前两种方法时,要求被调用的dll与调用者在同一目录下。也有说是在调用者的子目录下也可以。
实例代码可以在下面下载:
http://download.csdn.net/detail/u011623102/8060055
####################################################################################################
2014-12-11 更新
之前写的Com免注册方法,Dll文件必须在执行的应用程序同目录或子目录下,在实际使用中有太大的局限性。
其实在C#中要是能够知道所要掉的Com的位置,其实是可以用tlbimp.exe工具将Com组件转换成一个托管DLL。在引用此DLL就可以了。
C++调用C#的COM组件,最好的方法还是去使用Activation Context API加载指定清单。
使用的一个实例是在头文件中
#import “Dll或TLB"
看文档好像应该是还要加一个宏,我自己用的时候是建立的使用MFC的控制台程序,所以直接引用就可以用。
关键的结构是ACTCTX
ACTCTX actCtx;memset((void*)&actCtx, 0, sizeof(ACTCTX));actCtx.cbSize = sizeof(ACTCTX);actCtx.lpSource = _T("指定路径的manifest文件"); //直接使用manifest文件时只设置这个就可以了
HANDLE hCtx = ::CreateActCtx(&actCtx);
if (hCtx == INVALID_HANDLE_VALUE)
{
cout << "CreateActCtx returned: INVALID_HANDLE_VALUE"
<< endl;
}
else
{
ULONG_PTR cookie;
if (::ActivateActCtx(hCtx, &cookie))
{
// previous compound statement goes here...
//像注册了COM一样调用就好
::DeactivateActCtx(0, cookie);
}
}
好像ACTCTX中的lpSource字段还可以指定为DLL或是EXE
这样使用时需要用lpResourceName字段来指定嵌入的哪一个资源是清单资源
自此暂时够用了,ACTCTX指定DLL之后有需要在研究了
免注册COM使用参考相关推荐
- 关于COM的Reg-Free(免注册)技术简介及实例讲解。
我们都知道,在传统的COM技术中,当客户端调用COM时,该客户端必须首先通过regsvr32.exe在服务器上注册,否则会得到80040154(Class not registered)这样norma ...
- 在Delphi下使用迅雷APlayer组件进行免注册开发
之前都是用的delphi下的dspack进行的视频开发,这个组件其实很好用,就是找解码器麻烦点,而且还得在客户的计算机上使用RegSvr32.exe也注册解码器,要不有可能播放不了. 结果在查找合适的 ...
- Visual Studio 2017,C++MFC免注册调用大漠插件图文教程,详细版
Visual Studio 2017,C++MFC免注册调用大漠插件图文教程,详细版 前言 提示:这里可以添加本文要记录的大概内容: 有很多人都在问C++MFC怎么免注册调用?其实这些都有参考但是对于 ...
- 【转】 COM 免注册技术
今天实际应用时,又进行了一些测试,发现与以前看到资料中一些不同的表现,见最后的[补充]部分 通常,实例化 COM 组件前(包括采用这一技术的 DLL/ActiveX 控件),都需要先用 regsvr3 ...
- Windows COM 免注册 manifest 清单文件
一.原理 XP以上的操作系统支持COM免注册技术,操作系统在加载EXE时会自动扫描是否包含配套的manifest信息,若有则读取manifest内容加载组件,否则读取注册表. manifest描述了E ...
- 易语言大漠多线程免注册调用大漠插件
易语言免注册调用大漠 1.使用dmreg.dll来配合实现,这个文件有2个导出接口 SetDllPathW和SetDllPathA. SetDllPathW对应unicode,SetDllPathA对 ...
- 易语言免注册调用大漠插件dm.dll
实现所谓的免注册,其实还是通过运行命令regsvr32写入到了系统.本视频教程还讲述了在64位WIN7下大漠注册失败的解决方法,更好的免注册调用大漠插件,参考以下文章: 易语言大漠多线程免注册调用大漠 ...
- 易语言创建大漠模块及免注册调用大漠
1.什么是模块? 易语言模块相当于支持库其中可以包括子程序.常量.自定义数据类型,也相当于在程序中一些自己写的子程序.定义的数据类型和常量,可以在程序中直接调用,但调用时必须遵守模块使用的要求(比如: ...
- 免注册登陆以及QQ登陆
(一)QQ登陆 (1)基本调用过程分析: ①生成授权连接,需要配置回调地址 https://graph.qq.com/oauth2.0/authorize?response_type=code& ...
最新文章
- Android 内容观察者 ContentObserver 类
- 如何使用TensorRT对训练好的PyTorch模型进行加速?
- OSChina 周一乱弹 —— 六天颓废一天看剧
- 论坛报名 | AI赋能未来交通
- IT项目经理学习-德鲁克时间管理
- 李超:WebRTC传输与服务质量
- 微软大数据_我对Microsoft的数据科学采访
- JVM初学之类的加载过程
- 统计一行文本的单词个数_NLP中的文本表示方法
- java for新循环_java新特性-新式for循环(For_Each)
- 大厂HR:“不会数据分析,你还想干运营?”
- hive SQL Standard Based Hive Authorization 权限自定义(二)
- biopython有什么用_Biopython简介
- 低分辨率刷视频看了个寂寞?华为HMS Core超分辨率功能助您一招提升用户体验
- foo, bar, 甲乙丙丁
- 普渡大学统计与计算机科学,普渡大学西拉法叶分校统计学
- 83.Django项目中使用验证码
- 合肥计算机专业大学排名23,计算机专业大学排名
- Android获取QQ音乐url,QQ音乐vkey获取,更新播放url
- vue移动端网页适配
热门文章
- 基于点云的深度学习方法预测蛋白-配体结合亲和力【Briefings in Bioinformatics, 2022】
- 如何恢复手机误删的短信?只需三招就能恢复
- 讲课笔记03:数据分析工具Pandas
- 中国Android手机预装产业及用户使用情况研究报告
- Win10如何设置双屏幕
- 关于PostgreSQL使用的一些心得
- 实战:OpenKruise通用控制器-2022.3.12
- python中else与if的匹配原则_匹配规则
- 个人发卡系统 - 个人发卡网_ZFAKA-个人发卡网对接支付宝当面付失败解决方案
- 【技术分享】Lierda NB860+Lierda 云平台——云管端协作让万物互联更简单(一)