C++ 从DLL独立调用COM/WMI,并与主机应用程序隔离

C++ 从DLL独立调用COM/WMI,并与主机应用程序隔离,c++,dll,wmi,C++,Dll,Wmi,我在C++中制作了一个包装DLL,它公开了一些函数,当调用这些函数时,它们连接到WMI并在那里执行一些方法 问题是,主机应用程序是否已经或将调用CoInitialize/Ex未知,因此我正在寻找某种隔离/沙盒方法,使DLL独立于主机应用程序运行自己的COM/WMI 我仍然不完全熟悉C++线程模型,但在一个DLL中是否可能有多个独立的COM/WMI实例 从我能想到的克服这个问题的方法是: 构建一个连接到COM/WMI并允许使用共享内存进行呼叫的外部应用程序。DLL可以只与共享内存部分通信。(是否可

我在C++中制作了一个包装DLL,它公开了一些函数,当调用这些函数时,它们连接到WMI并在那里执行一些方法

问题是,主机应用程序是否已经或将调用
CoInitialize/Ex
未知,因此我正在寻找某种隔离/沙盒方法,使DLL独立于主机应用程序运行自己的COM/WMI

我仍然不完全熟悉C++线程模型,但在一个DLL中是否可能有多个独立的COM/WMI实例

从我能想到的克服这个问题的方法是:

构建一个连接到COM/WMI并允许使用共享内存进行呼叫的外部应用程序。DLL可以只与共享内存部分通信。(是否可以使用共享内存调用方法或函数?)。这样做的缺点是需要运行另一个进程作为中间人WMI通信,而这似乎不是实现这一点的最佳方式

如果可以直接从DLL中执行,那就更好了

是否可以创建一个独立的COM/WMI设置,使
CoInitialize/Ex
DLL范围内独立于主机应用程序运行?如何解决这个问题有什么建议吗


您好,谢谢。

,所以您可以通过创建另一个线程来实现“独立的COM设置”。这并不完全是“未知”,在未完成设置时,您将得到CO_E_NOTINITIALIZED。永远不要隐藏初始化错误,只需将其传递回调用方,以便程序员知道如何处理它。在你不熟悉线程的情况下编写线程代码是正确的一百倍。谢谢@GSerg,这正是我一直在寻找的。因此,你可以通过创建另一个线程来实现“独立的COM设置”。这并不完全是“未知的”,当它没有完成时,你会得到CO_E_NOTINITIALIZED。永远不要隐藏初始化错误,只需将其传递回调用方,以便程序员知道如何处理它。在不熟悉线程的情况下编写线程代码是正确的一百倍。谢谢@GSerg,这正是我一直在寻找的。