在 Visual Studio c++ 中创建将在 VB 中加载的 DLL

Posted

技术标签:

【中文标题】在 Visual Studio c++ 中创建将在 VB 中加载的 DLL【英文标题】:Create DLL in Visual Studio c++ that will be loading in VB 【发布时间】:2013-05-31 12:53:06 【问题描述】:

说明

我正在尝试创建一个项目,该项目将使用 VS2010 创建一个 DLL 文件(.COM 托管 DLL)。此 DLL 将在 VB 中加载。另外,我将在我的 dll 中使用 STL。

已经尝试过

1 - Created Visual C++ -> win32 -> Win32 project -> Next -> selected DLL -> 勾选 export Symbols -> Finish。这将是一个托管的 .COM DLL 吗?我该如何检查?此 DLL 将在 64 位操作系统上作为 64 位 dll 还是作为 x86 dll 运行?

2 - 创建 Visual C++ -> MFC-> MFC DLL -> 使用共享 MFC DLL 的常规 DLL 这将是一个托管的 .COM DLL 吗?我该如何检查?这个 DLL 会在 64 位操作系统上作为 64 位 dll 还是 x86 dll 运行?

此外,还有其他两个选项 Regular DLL With MFC statically linked 和 MFC extension DLL。我不喜欢第一个,因为它使将来升级我的 dll 变得更加困难,而且我不知道第二个做什么?

我可以使用其他选项来创建 DLL 吗?

【问题讨论】:

“.COM 托管 DLL”到底是什么意思? STL 是本机 C++,所以不清楚你在追求什么。也许与其问如何创建 DLL,不如描述问题并问如何解决。 我是 DLL 的初学者。 “.COM 托管 DLL”是指使用 Visual c++(托管/非托管?)创建并且可以由 VB(托管)加载的 DLL。此 DLL 将在内部使用 STL(矢量和映射)。这个 DLL 有一些事件。加载此 DLL 的应用程序可以订阅这些事件。因此,要订阅事件,需要注册 dll(regsrv32.exe 用于注册 COM 组件)。我为事件订阅添加了“.COM”一词。如果有更好的方法可以分享给我吗? 【参考方案1】:

如果可能,您应该消除使用 STL 和 COM 的要求,只创建一个托管程序集。托管程序集可以由托管代码使用,并且可以发布事件以供托管代码使用。在 Visual Studio 中,这将是一个 CLR -> 类库项目。

如果您必须将 STL 和 COM 与托管代码一起使用,那么您需要创建一个混合模式 DLL。这并不简单,如果你的经验有限,我不推荐这条路线。

或者,如果您可以消除对托管代码的要求,那么您可以创建一个实现 COM 接口的纯本机 DLL。 COM 接口可由本机代码或托管代码使用,但它们需要在使用前进行注册,并且需要托管包装器才能从托管代码中使用。

【讨论】:

谢谢欧文。我可以避免使用 STL。但是,如何在不使用 COM 的情况下注册托管程序集?可以分享一些教程吗?最后一个问题:为什么选择“CLR-> 类库项目”而不是 ATL-> ATL 项目并选择 COM+ 支持? 您不注册托管程序集(但是您可以将它们安装在全局程序集缓存或 GAC 中),您只需直接从使用它的代码中引用程序集。 ATL 项目是本机 C++ 代码。

以上是关于在 Visual Studio c++ 中创建将在 VB 中加载的 DLL的主要内容,如果未能解决你的问题,请参考以下文章

如何在visual studio2008中创建,编译和运行C++程序,

如何在 Visual Studio 2017 中创建 Visual c++ MFC 控制台项目

如何在 Visual Studio 2010 Ultimate 中创建 C++ 项目

使用 C++ 在 Visual Studio 中创建虚拟绘图板 [关闭]

如何在 Visual Studio 2017 中创建 C++ Windows 桌面应用程序?

使用 C++ 在 Visual Studio 2019 中创建新的头文件?