小编Mik*_*ski的帖子

获取COM服务器的进程ID

我正在通过将Windows消息直接发送到HWND并调用自动化应用程序公开的COM服务器来实现一些自动化.

如果有多个实例正在运行,我需要能够确定COM服务器的进程ID,这样我可以使用COM调用命中相同的实例作为我发送Windows消息的实例.

我可以使用正在运行的对象表枚举所有正在运行的COM服务器,并为所有这些服务器返回monikers,但COM对象本身不会公开任何可用于获取窗口句柄,线程ID,进程ID或任何类型的方法.

有没有办法弄清楚,基于名字对象或名字对象的实际绑定COM对象,COM服务器的进程ID是什么?

谢谢!

com winapi moniker com-server

8
推荐指数
1
解决办法
1260
查看次数

忽略/覆盖AttributeUsage限制

我需要能够应用于DisplayAttribute类,但它AttributeUsage不允许在当前的.NET/.NET Core版本中.看起来这已经针对.NET Core vNext进行了补救,但如果有一些解决方法能够以某种方式忽略或覆盖此限制,直到此更改进入.NET版本非常有用.我能看到的唯一选择是重新实现整个事情(包括本地化),但我真的不想支持和测试,只要在.NET vNext发布时就弃用它.

任何聪明的想法/黑客?

在CLR运行时是否验证了AttributeUsage限制,还是只是编译时间限制?如果它们只是编译时间检查,那么是否有一种聪明的方法来更改编译器使用的元数据"欺骗"它允许使用或以某种方式修改系统程序集,以便我的开发机器允许使用?

*我似乎无法编辑赏金说明,只是为了澄清,赏金的解决方案必须适用于.NET Framework,以及.NET Core的奖励积分.

.net c# custom-attributes .net-core

8
推荐指数
1
解决办法
235
查看次数

给定 UTF-16 大小的最大 UTF-8 字符串大小

确定对给定数量的 UTF-16 代码单元进行编码所需的最大 UTF-8 字节数(即String.LengthC# / .NET 中的值)的公式是什么?

我看到三种可能性:

  1. # of UTF-16 code units x 2

  2. # of UTF-16 code units x 3

  3. # of UTF-16 code units x 4

UTF-16 代码点由 1 个或 2 个代码单元表示,因此我们只需要考虑字符串填充其中一个或另一个的最坏情况。如果 UTF-16 字符串完全由 2 个代码单元代码点组成,那么我们知道 UTF-8 表示的大小最多相同,因为代码点在两种表示中最多占用 4 个字节,因此最坏的情况就是上面的选项(1)。

因此,需要考虑的一个有趣的情况(我不知道答案)是单个代码单元 UTF-16 代码点在 UTF-8 表示中可能需要的最大字节数。

如果所有单个代码单元 UTF-16 代码点都可以用 3 个 UTF-8 字节表示(我的直觉告诉我这是最有意义的),那么选项 (2) 将是最坏的情况。如果有任何需要 4 个字节,则选项 (3) 将是答案。

有人知道哪个是正确的吗?我真的希望(1)或(2)因为(3)会让事情变得更加困难:/

更新

据我所知,UTF-16 以单个代码单元对 BMP 中的所有字符进行编码,而所有其他平面以 2 个代码单元进行编码。

看来UTF-8可以在3个字节内编码整个BMP,并使用4个字节来编码其他平面。

因此,在我看来,上面的选项(2)是正确的答案,这应该有效:

string str = "Some string";
int …
Run Code Online (Sandbox Code Playgroud)

.net c# utf-8 utf-16 character-encoding

5
推荐指数
1
解决办法
2838
查看次数