Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在运行时加载COM DLL_C++_Windows_Visual Studio_Com_Vb6 - Fatal编程技术网

C++ 如何在运行时加载COM DLL

C++ 如何在运行时加载COM DLL,c++,windows,visual-studio,com,vb6,C++,Windows,Visual Studio,Com,Vb6,我有一个VB6 COM DLL。我想从C++中使用它。我知道如何登记它,从DLL生成TLB文件,并且在C++中导入它。 但是,我希望在运行时动态地加载和使用DLL,而不需要事先知道它们。这可能吗 谢谢,看一下这两篇MSDN文章,以及关于COM组件的免注册激活。这里也有一些类似的问题,因此: 看看这两个MSDN条款,以及关于COM组件的免注册激活。这里也有一些类似的问题,因此: 是的,但你需要把问题弄清楚 有时,您确实预先知道COM接口,但不知道实现。在这种情况下,您可以创建接口的虚拟

我有一个VB6 COM DLL。我想从C++中使用它。我知道如何登记它,从DLL生成TLB文件,并且在C++中导入它。 但是,我希望在运行时动态地加载和使用DLL,而不需要事先知道它们。这可能吗


谢谢,

看一下这两篇MSDN文章,以及关于COM组件的免注册激活。这里也有一些类似的问题,因此:


看看这两个MSDN条款,以及关于COM组件的免注册激活。这里也有一些类似的问题,因此:


是的,但你需要把问题弄清楚

有时,您确实预先知道COM接口,但不知道实现。在这种情况下,您可以创建接口的虚拟实现并#导入它。在运行时,您仍然需要注册真正的组件,从中获取一个对象(可能通过
CoCreateInstance
),并将其存储在适当的智能指针中


有了VB6,它就不那么直接了。这增加了间接性。阅读
IDispatch
。您需要获得已知接口来描述未知接口。这样,就可以在运行时获得未知接口。

是的,但您需要更清楚地回答这个问题

有时,您确实预先知道COM接口,但不知道实现。在这种情况下,您可以创建接口的虚拟实现并#导入它。在运行时,您仍然需要注册真正的组件,从中获取一个对象(可能通过
CoCreateInstance
),并将其存储在适当的智能指针中


有了VB6,它就不那么直接了。这增加了间接性。阅读
IDispatch
。您需要获得已知接口来描述未知接口。这样,在运行时可以获得未知的接口。

imHO,您至少需要一些公共接口(这样就知道在C++端调用什么)。 我会这样做:

  • 定义公共接口(在其自己的DLL/TLB中)

  • 在一个或多个COM服务器中实现此接口

  • < P>导入C++中的这个接口(我们称之为“强>客户端<强”)

  • 定义在客户端中传递要使用的COM服务器(动态加载)的progid的方法


  • 希望这有助于

  • 定义公共接口(在其自己的DLL/TLB中)

  • 在一个或多个COM服务器中实现此接口

  • < P>导入C++中的这个接口(我们称之为“强>客户端<强”)

  • 定义在客户端中传递要使用的COM服务器(动态加载)的progid的方法


  • 希望这对您有所帮助

    您希望避免注册它们,还是避免生成类型库和#导入?或者两者都有(我不确定这是否可行)?您希望避免注册它们,还是避免生成类型库和#导入?或者两者都有(我不确定这是否可能)?