您尚未阐明 VB 代码是进程外 COM 服务器,还是使用 C++ inproc COM 对象的客户端。
如果 VB 代码是客户端,您可以将其构建为 VB.Net 可执行文件,使用对 coclass 的 COM 引用,或者如果您不希望在构建期间注册 C++ 对象,您可以使用类型库上的 TlbImp 工具生成托管互操作程序集以从 VB.Net 代码中引用。
如果您的 VB.Code 是一个进程外 COM 服务器,您必须使用 COMVisible 属性标记您希望通过 COM 获得信任的类,然后使用 RegAsm 工具向 COM 注册您的程序集。
另一种选择是将 C++ 代码编译为托管 C++,并将其从 VB 代码中引用为标准托管程序集。这种方法的优点是您将完全绕过 COM 互操作层并完全留在托管世界中,这具有一定的完美优势。另一方面,有两个缺点 - a) 您的 C++ 代码只能由该特定客户端访问,除非您将它放在 GAC 中,以及 b) 编写托管 C++ 将需要一些加速。我认为第一个不会影响您,因为在您的场景中,听起来 COM 仅用作从 VB6 代码交叉到较低级别 C++ 的便捷方式。但是,第二个可能会给您带来一些麻烦。
更新:根据您的评论更新,实际上您似乎有一个直接从 VB 代码调用的 C++ 代码,而该代码又通过 COM 从其他客户端调用。
如果确实如此,那么我的建议是将 VB6 代码重新编译为 VB.Net(您可能必须对代码进行一些更改,因为这两个平台并不完全相同),并使用 COMVisible 公开它作为 COM 对象,并使用 P/Invoke 来使用当前的 C++ 代码(这与当前您的 VB6 代码使用它的方式非常相似)。不需要将 C++ 重新编译为托管 C++ 组件。