Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 604|回复: 5
打印 上一主题 下一主题

COM相关技术实现

[复制链接]

1228

主题

1997

帖子

7580

积分

认证用户组

Rank: 5Rank: 5

积分
7580
跳转到指定楼层
楼主
发表于 2023-6-3 15:44:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


每一个EXE 文件都将在不同的进程中运行而每一个进都有其自己的进空间。
个进程空间中的逻辑地址 0x0000ABBA所对应的物理地址将不同于另外个进程中同一逻地址所对应的物理地址。
因此若一个进程将地址 0x0000ABBA 传给另外个程后者用此地址所访问到的内存单元将不是前一进所希望的(如图 10-1 所示)
同每一个EXE都有其自己的进程不同DIL将被映射到链接它们的 EXE文件的进空间中。
由于这个原因DLL也被称作是进程中服务器
而 EXE 则被称作是进程外服务器。
在某些情况下,EXE 也被称作是本地服务器以同另外一种类型的进程外服务器“远程服务器”相区别。
远程服务器指的是运行于另外一个不同的机器上的进程外服务器。在第5章中我们介绍了组件同其客户共享相同的地址空间的重要性。组件将把一个接口传给客户。一个接实际上是一个函数指针的数组

COM使用的线程的类型与 Win32 的两种类型线是相同的只不过是换了不同的名称而已。
与 Wm32 中的用户界面线程相对应COM 有一个“套间线程”
而与工作线程相对应的则的一个自由线程。
COM 线最为困难的部分在于其术语,而这些术语最困难的部分在于没有任何文档是一致的。
Win32 SKD 使用的是与COM完同的语作者将尽量避免使用那些术语,而是定义自己的术语。
在这一章中我们将把用户界面风格的线程称为是套间线程,而将一个工作线称作是自由线程。
既然 COM线程与 Wm32 并没有什么差别那么为什么COM还需要定义自己的线程呢?
其原因在于参数调整与线程同步。
这样就可以保证某个套间中的组件将只在相应的套间线中被调用,因而组件不需要考虑线程同步的问题。
由于 COM 将保证所有对组件的调用均被同步因此组件无需是线程安全的。这样组件的编写将会容易得多。
实际上本书中给出的所有组件都不是线安全的。但只要它们是由套间线程创建的,我们将可以确信它们不会被不同的线程同时访问。
这就是自由线程同套间线程之间的区别。

COM 将在套间线程上同步对组件的调用。
对于由自由线创建的组件的调用COM不能使之同步。
若某个组件是由自由线程创建的,则任意线程均可在任意时候调用它。
此时组件开发者应保证对组件访问的同步。也就是说,此时组件应是线程安全的。
实际上使用自由线程,同步的工作将由 COM 移至组件本身。
此时由于 COM 并不同步对组件的调用因此自由线不需要消息循环。
由自由线程创建的组件将是一个可以供任意线程访问的组件。
此时创建此组件的线程并不拥有此组件,此组件将被所有的线共享,并可供所的线程自由访问。

https://learn.microsoft.com/en-u ... ud-file-sync-engine
https://learn.microsoft.com/zh-c ... ud-file-sync-engine


https://learn.microsoft.com/zh-c ... -customstatehandler  desktop3:CustomStateHandler


https://learn.microsoft.com/zh-cn/windows/win32/shell/handlers 创建 Shell 扩展处理程序



回复

使用道具 举报

1228

主题

1997

帖子

7580

积分

认证用户组

Rank: 5Rank: 5

积分
7580
沙发
 楼主| 发表于 2023-6-3 15:57:42 | 只看该作者
本帖最后由 Qter 于 2023-6-3 16:39 编辑

https://learn.microsoft.com/zh-c ... p-to-uwp-distribute  分发打包的桌面应用



分发应用程序但不将其置于 Microsoft Store 中
https://learn.microsoft.com/zh-c ... p-to-uwp-distribute



https://learn.microsoft.com/zh-c ... p-to-uwp-extensions

与文件资源管理器集成
  1. <Extension Category="windows.cloudfiles" >
  2.     <CloudFiles IconResource="[Icon]">
  3.         <CustomStateHandler Clsid ="[Clsid]"/>
  4.         <ThumbnailProviderHandler Clsid ="[Clsid]"/>
  5.         <ExtendedPropertyhandler Clsid ="[Clsid]"/>
  6.         <CloudFilesContextMenus>
  7.             <Verb Id ="Command3" Clsid= "[GUID]">[Verb Label]</Verb>
  8.         </CloudFilesContextMenus>
  9.     </CloudFiles>
  10. </Extension>
复制代码
d

回复 支持 反对

使用道具 举报

1228

主题

1997

帖子

7580

积分

认证用户组

Rank: 5Rank: 5

积分
7580
板凳
 楼主| 发表于 2023-6-3 16:46:31 | 只看该作者
回复 支持 反对

使用道具 举报

1228

主题

1997

帖子

7580

积分

认证用户组

Rank: 5Rank: 5

积分
7580
地板
 楼主| 发表于 2023-6-3 17:09:50 | 只看该作者
https://learn.microsoft.com/zh-c ... mponent-in-cppwinrt

使用 C++/WinRT 的 Windows 运行时组件
回复 支持 反对

使用道具 举报

1228

主题

1997

帖子

7580

积分

认证用户组

Rank: 5Rank: 5

积分
7580
5#
 楼主| 发表于 2023-6-3 18:16:54 | 只看该作者
https://github.com/microsoft/cppwinrt/issues/601

C++/WinRT support for implementing out-of-proc WinRT servers
回复 支持 反对

使用道具 举报

1228

主题

1997

帖子

7580

积分

认证用户组

Rank: 5Rank: 5

积分
7580
6#
 楼主| 发表于 2023-6-3 18:30:56 | 只看该作者
本帖最后由 Qter 于 2023-6-3 18:34 编辑

https://www.codeproject.com/Arti ... me-Component-in-a-W
The idea behind it is similar to that of the Component Object Model (COM), in fact, even in COM a component once published, regardless of the language in which it was written, can be used transparently by applications written in any compatible COM language. So in WinRT as well as in COM, applications can be written in various languages(language implementation: C++, C#, VB, Delphi, etc.).
Each language, or rather every compiler, in this case produces not only DLL.s or EXE but also .winmd files (WinMD) or Windows Metadata, which contain the description, in machine code, of the implemented types (metadata).

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-4-29 16:49 , Processed in 0.063666 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表