我试图弄清楚这是如何工作的:
- 我有一个 .NET dll,比如 NETDll.dll,我没有要修改的源代码。
- 我想在我的 C++ 项目中使用该 NETDll.dll,它将创建一个本机 dll,比如 NativeDll.dll
所以这就是我认为的问题所在(我可能是错的):
- 由于我的 NativeDll.dll 是原生的,所以它不能是 CLR/CLI dll。本机 dll 没有运行时引擎,但 CLR 有。
我该怎么做?感谢您的任何建议。
您将不得不在 .NET 程序集中将某些内容公开为 COM。
您的本机 DLL 可以是混合模式的本机和 .NET 程序集,使用 C++/CLI。Google 或在此处搜索“#pragma managed”/“#pragma unmanaged”,或查看任何有关 C++/CLI 的书籍。基本上,假设你有 Visual C++ 2010 或 2012,你可以这样写:
#pragma unmanaged
int main()
{
CallManagedTrampoline();
}
#pragma managed
void CallManagedTrampoline()
{
TypeFromDotnetDLL t = new TypeFromDotnetDLL();
t.CallSomething();
}
事实上,根据 .NET DLL 中的详细信息,您甚至可能不需要将托管的#pragma 放在 CallManagedTrampoline() 调用之前——有时您可以直接从非托管代码中调用。C++/CLI 是你的朋友。