1

我需要构建一个 C++ 库来分发给我们的客户。该库必须能够从多种语言访问,包括 VB6、C++、VB.net 和 C#。

到目前为止,我一直在使用 ActiveX 控件(ocx 文件)。但我想知道是否有更好的库(dll 等)可以构建。你有什么建议吗?

我仅限于 C++ 作为库语言,但您可以提及其他语言以供其他开发人员参考。

PS对不起,如果这个问题已经被问到了。我很难找到合适的标题。随时纠正我的英语。

编辑:似乎最好的选择是 DLL 或 OCX(即 COM),但我仍然对我将选择哪一个存有疑问。哪一种更适合现代语言(例如 .NET)?从最终开发人员的角度来看,哪一个更容易使用?

4

4 回答 4

3

几乎每种语言都有一种加载动态库和从它们访问导出的 C 函数的方法。

没有什么可以阻止您在 dll 中使用 C++,但为了获得最大的可移植性,请仅导出 C 函数。我在这篇文章中有更多关于这个的信息。

于 2009-01-08T12:58:27.560 回答
3

如果您正在考虑同时支持 VB6 和 .NET,那么您几乎无法通过 COM 公开接口,但至少这将使您不必基于您的语言/运行时系统创建多个包装器'正在尝试与之互动。

于 2009-01-08T14:06:38.450 回答
1

如果有任何可能需要将其移植到非 Windows 平台,那么 DLL / 共享库是您的最佳选择,因为 COM 对象实际上根本无法移植。

此外,您几乎可以从任何平台调用 DLL,即使它需要您编写某种包装器。将 dll 包装在 com 对象中非常容易,但如果您制作本机 com 对象,则添加 C 风格的 DLL API 会困难得多。另外,您可能想从 java 中调用它,并且编写 JNI 包装器来调用您的 DLL 比让它以任何类型的跨平台方式与 COM 一起工作要容易得多。

真的,这取决于您真正需要从哪些平台调用它,以及您能确定您将来不会得到不寻常的东西。

于 2009-01-16T11:19:35.017 回答
0

要从所有这些语言中调用,您唯一真正的选择是 COM,而不必在需要的地方编写包装器(这会破坏这一点)

于 2009-01-08T12:50:11.977 回答