native dll调用.NET dll

时间:2013-05-10 15:02:06

标签: .net dll clr native

我想弄清楚这是如何起作用的:

  • 我有一个.NET dll,比如NETDll.dll,我没有源代码可以修改。
  • 我想在我的C ++项目中使用那个NETDll.dll,它将创建一个本机dll,比如NativeDll.dll

所以这就是我认为问题出在哪里(我可能是错的):

  • 由于我的NativeDll.dll是原生的,因此它不能是CLR / CLI DLL。 Native dll没有运行时引擎,但CLR没有。

我该怎么做?感谢您的任何建议。

2 个答案:

答案 0 :(得分:1)

您必须在.NET程序集中公开某些内容。

答案 1 :(得分:1)

您的本机DLL可以是使用C ++ / CLI的混合模式native-and-.NET程序集。谷歌或在这里搜索“#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是你的朋友。