相关疑难解决方法(0)

为免注册COM生成清单文件

我有一些应用程序(一些本机,一些.NET)使用清单文件,以便它们可以完全隔离部署,而无需任何全局COM注册.例如,在myapp.exe.manifest文件中声明对dbgrid32.ocx com服务器的依赖关系如下,该文件与myapp.exe位于同一文件夹中:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity type="win32" name="myapp.exe" version="1.2.3.4" />
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="dbgrid32.ocx" version="5.1.81.4" />
    </dependentAssembly>
  </dependency>
</assembly>
Run Code Online (Sandbox Code Playgroud)

dbgrid32.ocx与它自己的dbgrid32.ocx.manifest文件一起部署到同一文件夹:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity type="win32" name="dbgrid32.ocx" version="5.1.81.4" />
  <file name="dbgrid32.ocx">
     <typelib
        tlbid="{00028C01-0000-0000-0000-000000000046}"
        version="1.0"
        helpdir=""/>
    <comClass progid="MSDBGrid.DBGrid"
       clsid="{00028C00-0000-0000-0000-000000000046}"
       description="DBGrid  Control" />
  </file>
</assembly>
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但手动维护这些清单文件有点痛苦.有没有办法自动生成这些文件?理想情况下,我只想声明应用程序对COM服务器列表(本机和.NET)的依赖性,然后自动生成其余部分.可能吗?

com dll manifest typelib regfreecom

84
推荐指数
4
解决办法
5万
查看次数

对于具有ThreadingModel Both的对象,是否需要COM编组?

这是由另一个问题引发的.

具体地讲,我有一个在过程COM类中,在所定义的CLSID注册表为具有ThreadingModelBoth.

我们的进程激活了这个对象CoCreateInstance(不是 CoCreateInstanceEx,如果这对于进程内DLL服务器来说很重要)

Both文档中列出的规则的线程模型和给定规则:

Threading model of server | Apartment server is run in
------------------------------------------------------
Both                      | Same apartment as client
Run Code Online (Sandbox Code Playgroud)

鉴于汉斯在另一个答案中所写的内容:

...当需要在不同的线程上进行客户端调用时,就会发生编组....当comClass元素中指定的ThreadingModel需要它时,可能会发生.换句话说,当COM对象在一个线程上创建但在另一个线程上调用时,服务器不是线程安全的.

我的初步结论是,这样的对象永远不需要对其接口的调用进行隐式编组,因为该对象将始终与其客户端位于同一个公寓中.

这是正确的,即使客户端进程作为STA运行?

c++ com apartments marshalling sta

4
推荐指数
1
解决办法
587
查看次数

标签 统计

com ×2

apartments ×1

c++ ×1

dll ×1

manifest ×1

marshalling ×1

regfreecom ×1

sta ×1

typelib ×1