草庐IT

c++ - 为什么这个 COM IUnknown::Release 的实现有效?

从例子中我看到COMIUnknown::Release()函数实现是这样的:ULONGRelease(){InterlockedDecrement(&m_count);if(m_count==0){deletethis;}returnm_count;}因此,如果m_count为0,那么我们将删除“this”对象,并返回引用计数。我不明白的是为什么它有效?!?!删除对象不会破坏调用堆栈,或者因为它被线程占用,所以它与对象无关吗???如果对象被删除了,怎么可能返回m_count,应该是被删除了。我本可以说服自己,如果删除后代码返回硬编码0没关系,但它怎么会返回成员?!?!非常感谢您的帮助!

windows - 如何为仅用于远程 COM 对象的 TLB 创建 list 文件?

我的Delphi应用程序Client.exe需要几个.tlb文件才能工作。这些文件定义服务器接口(interface)。相应的对象实例是使用System.Win.ComObj.CreateRemoteComObject创建的。问题是什么?目前.tlb文件在安装过程中使用regtlibv12.exe进行全局注册,并在卸载软件时取消注册。这使得无法安装和卸载同一软件的多个实例,因为它会破坏TLB注册。尝试用RegistrationFreeCOM解决它想法是使用.tlb文件而不用注册,但使用.manifest文件。我知道如何使用customizedWindowsapplicationmani

windows - Spectre/Meltdown 补丁导致 COM 方法返回 E_ACCESSDENIED

我从事一个大量使用COM的项目,而新的Spectre/Meltdown补丁无疑会干扰程序内的通信。我怎么知道?我重新镜像了不存在此补丁的Windows机器(2017年5月)。我安装了我的程序,一切都按预期工作。然后我下载了所有必需的更新。该程序不再起作用。然后我只卸载了Meltdown/Spectre补丁(2018年1月1日针对基于x64的系统的Windows10版本1507的累积更新(KB4056893)),程序恢复正常行为。我将调试器连接到我的程序并追踪到这部分代码。INvRtrControl4Itf*poRouterControl=GetNvRtrControl4();if(po

windows - 为什么 COM CoInitializeSecurity 在我的 DLL 中失败?

我目前正在研究来自MSWindowsSDK6.1的VSHADOW.EXE3.0。我制作了一个可以编译成DLL的版本,该DLL仅导出一个新编写的函数,该函数需要命令行作为字符串,将其标记化,然后调用旧的wmain。DLL不是COM服务器。它在编译为EXE时与旧版本完全一样,但在编译为DLL时却不能正常工作,因为此调用失败:CoInitializeSecurity(NULL,-1,NULL,NULL,RPC_C_AUTHN_LEVEL_PKT_PRIVACY,RPC_C_IMP_LEVEL_IDENTIFY,NULL,EOAC_NONE,NULL);因HRESULT错误0x80010119

windows - 无法连接到真正的 www.google.com

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。这个问题似乎不是关于aspecificprogrammingproblem,asoftwarealgorithm,orsoftwaretoolsprimarilyusedbyprogrammers的.如果您认为这个问题是关于anotherStackExchangesite的主题,您可以发表评论,说明问题可能在哪里得到解答。关闭7年前。Improvethisquestion当我使用Chrome作为我的浏览器时,我收到了这条消息,说我无法连接到真正的谷歌网站。我试图通过以下方式解决问题检查我的时区。(因为

c++ - 如何检索 COM 类的接口(interface) ID 以便将其传递给 CoCreateInstance?

我想以编程方式检索任何类的接口(interface)ID,以便我可以将它传递给CoCreateInstance。非常感谢任何帮助!!请参阅下面的“我如何获得此信息”:HRESULThResult;CLSIDClassID;void*pInterface;if(!(hResult=SUCCEEDED(CoInitialize(NULL)))){return1;}if(S_OK==CLSIDFromProgID(OLESTR("Scripting.FileSystemObject"),&ClassID)){hResult=CoCreateInstance(ClassID,NULL,CLSC

windows - D 对 COM 的支持

维基百科是这样说的:“在MicrosoftWindows上,D可以访问COM(组件对象模型)代码。”D中对COM有什么样的支持?它比在C++中使用COM更容易吗?我找到了thislink在D页面上,但它并没有告诉我太多信息。 最佳答案 Juno有一个新版本.5.1,它有很多连接到Word、Excel、FrameMaker、Trados等的好方法。因此,这是可能的,也很容易。像这样:scopeword=newDispatchObject("Word.Application");scopewDocs=word.get("Document

java - 获取与 COM 端口相关的设备/驱动程序信息?

我有一个串口转USB设备,在Windows设备管理器中有一个类似名称的设备驱动程序。这些设备并不总是在系统启动时占用相同的COM端口,因此我的程序需要在启动时识别它。我试过使用RXTX枚举系统上的COM端口,但这没有用,因为CommPortIdentifier.getName()只是返回COM名称(例如COM1、COM2等)我需要获取驱动程序制造商名称或出现在设备管理器中的驱动程序名称,并将其与COM名称相关联。这可以用Java轻松完成吗?(我会对支持此功能的任何第3方Java库感兴趣。)否则,我如何通过win32API开始完成此操作? 最佳答案

windows - 为什么我要使用 "Both"COM 线程模型而不是 "Free"?

根据thisarticle如果我使用“两者”或“自由”线程模型注册我的COM对象,该对象必须是完全线程安全的。具体来说,所有对全局共享变量的访问都必须同步,所有对成员变量的访问也必须同步。这是很大的努力。现在我明白能够将我的对象注册为使用“免费”线程模型是有利的,并且可能值得付出使其完全线程安全的代价。但是为什么我要做同样的事情并使用“两者”线程模型注册我的对象呢?会有什么好处?如何在“两者”和“免费”之间做出选择? 最佳答案 双线程模型将组件标记为支持线程模型“Both”的主要原因是为了在从单线程单元(STA)调用组件时提高性能。

c# - 列出可用的 COM 端口

我有一个非常小的代码可以显示可用的COM端口。我的问题是:有没有一种简单的方法可以让程序在托盘中运行,并且仅在新的COM端口可用时弹出,并且是否可以添加您可以在设备管理器中看到的COM端口的名称ec“USBserial港口”?我经常添加/删除一个USB->RS232转换器,这让我很头疼,因为我必须进入设备管理器才能看到它分配给了哪个COM端口。每次都不一样也许已经有一个小应用程序可以做到这一点,但我还没有在谷歌上找到它usingSystem;usingSystem.Windows.Forms;usingSystem.IO.Ports;namespaceAvailable_COMport