【发布时间】:2013-11-29 07:16:27
【问题描述】:
即使搜索了一段时间,我也找不到明确的答案。这似乎是一个不常见的问题:
我有一个应该放在 DLL 中的本机实现。该 DLL 应该可供本机应用程序和托管应用程序使用。
所以如果我用 C++/CLI 编写这个 DLL,我可以公开两件事:
- 一个扁平的、C 风格的导出函数接口,可由本机应用程序使用。
- 可通过引用此 DLL 从任何托管应用程序(例如 C#)中使用的托管类
这行得通吗?纯本机应用程序是否能够加载此 DLL 并调用公开的函数?
【问题讨论】:
-
是的,这就是 C++/CLI 存在的原因之一——它一点也不“不常见”,我们一直都在这样做。 MSDN is very clear on the subject
-
COM组件可以从本机代码和托管代码中调用;这是另一种选择。
-
事实证明这似乎行不通。我必须使用 /MT 开关编译我的 DLL(可能是因为我正在链接的某个库?)。但是我不能用 /clr 编译(/MT 和 /clr 不能一起工作,链接器说)......啊!
-
使用简单的分层技术。首先编写本机代码,以便它可以直接从非托管代码中使用。在它上面添加一个 C++/CLI 层,它使用本机代码,因此它可以从托管代码中使用。使用来自本机代码的纯托管代码是可能的,只是更难做到正确。你必须了解 COM。
标签: c# c++ c++-cli native managed