免注册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使用参考相关推荐

  1. 关于COM的Reg-Free(免注册)技术简介及实例讲解。

    我们都知道,在传统的COM技术中,当客户端调用COM时,该客户端必须首先通过regsvr32.exe在服务器上注册,否则会得到80040154(Class not registered)这样norma ...

  2. 在Delphi下使用迅雷APlayer组件进行免注册开发

    之前都是用的delphi下的dspack进行的视频开发,这个组件其实很好用,就是找解码器麻烦点,而且还得在客户的计算机上使用RegSvr32.exe也注册解码器,要不有可能播放不了. 结果在查找合适的 ...

  3. Visual Studio 2017,C++MFC免注册调用大漠插件图文教程,详细版

    Visual Studio 2017,C++MFC免注册调用大漠插件图文教程,详细版 前言 提示:这里可以添加本文要记录的大概内容: 有很多人都在问C++MFC怎么免注册调用?其实这些都有参考但是对于 ...

  4. 【转】 COM 免注册技术

    今天实际应用时,又进行了一些测试,发现与以前看到资料中一些不同的表现,见最后的[补充]部分 通常,实例化 COM 组件前(包括采用这一技术的 DLL/ActiveX 控件),都需要先用 regsvr3 ...

  5. Windows COM 免注册 manifest 清单文件

    一.原理 XP以上的操作系统支持COM免注册技术,操作系统在加载EXE时会自动扫描是否包含配套的manifest信息,若有则读取manifest内容加载组件,否则读取注册表. manifest描述了E ...

  6. 易语言大漠多线程免注册调用大漠插件

    易语言免注册调用大漠 1.使用dmreg.dll来配合实现,这个文件有2个导出接口 SetDllPathW和SetDllPathA. SetDllPathW对应unicode,SetDllPathA对 ...

  7. 易语言免注册调用大漠插件dm.dll

    实现所谓的免注册,其实还是通过运行命令regsvr32写入到了系统.本视频教程还讲述了在64位WIN7下大漠注册失败的解决方法,更好的免注册调用大漠插件,参考以下文章: 易语言大漠多线程免注册调用大漠 ...

  8. 易语言创建大漠模块及免注册调用大漠

    1.什么是模块? 易语言模块相当于支持库其中可以包括子程序.常量.自定义数据类型,也相当于在程序中一些自己写的子程序.定义的数据类型和常量,可以在程序中直接调用,但调用时必须遵守模块使用的要求(比如: ...

  9. 免注册登陆以及QQ登陆

    (一)QQ登陆 (1)基本调用过程分析: ①生成授权连接,需要配置回调地址 https://graph.qq.com/oauth2.0/authorize?response_type=code& ...

最新文章

  1. Android 内容观察者 ContentObserver 类
  2. 如何使用TensorRT对训练好的PyTorch模型进行加速?
  3. OSChina 周一乱弹 —— 六天颓废一天看剧
  4. 论坛报名 | AI赋能未来交通
  5. IT项目经理学习-德鲁克时间管理
  6. 李超:WebRTC传输与服务质量
  7. 微软大数据_我对Microsoft的数据科学采访
  8. JVM初学之类的加载过程
  9. 统计一行文本的单词个数_NLP中的文本表示方法
  10. java for新循环_java新特性-新式for循环(For_Each)
  11. 大厂HR:“不会数据分析,你还想干运营?”
  12. hive SQL Standard Based Hive Authorization 权限自定义(二)
  13. biopython有什么用_Biopython简介
  14. 低分辨率刷视频看了个寂寞?华为HMS Core超分辨率功能助您一招提升用户体验
  15. foo, bar, 甲乙丙丁
  16. 普渡大学统计与计算机科学,普渡大学西拉法叶分校统计学
  17. 83.Django项目中使用验证码
  18. 合肥计算机专业大学排名23,计算机专业大学排名
  19. Android获取QQ音乐url,QQ音乐vkey获取,更新播放url
  20. vue移动端网页适配

热门文章

  1. 基于点云的深度学习方法预测蛋白-配体结合亲和力【Briefings in Bioinformatics, 2022】
  2. 如何恢复手机误删的短信?只需三招就能恢复
  3. 讲课笔记03:数据分析工具Pandas
  4. 中国Android手机预装产业及用户使用情况研究报告
  5. Win10如何设置双屏幕
  6. 关于PostgreSQL使用的一些心得
  7. 实战:OpenKruise通用控制器-2022.3.12
  8. python中else与if的匹配原则_匹配规则
  9. 个人发卡系统 - 个人发卡网_ZFAKA-个人发卡网对接支付宝当面付失败解决方案
  10. 【技术分享】Lierda NB860+Lierda 云平台——云管端协作让万物互联更简单(一)