2013-05-10 497 views
0

我试图找出如何能工作:机DLL调用一个.NET的DLL

  • 我有一个.NET的DLL,说NETDll.dll,我没有源代码进行修改。
  • 我想使用NETDll.dll在我的C++项目,该项目将创建一个本地的dll,说NativeDll.dll

因此,这里是我认为问题出在哪里(我可能是错的tho):

  • 由于我的NativeDll.dll是本机的,因此它不能是CLR/CLI dll。本机dll没有运行时引擎,但CLR的确。

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

回答

1

你将不得不在.NET程序集中公开某些东西。

+0

我该怎么做?我没有访问.NET DLL的源代码 – 2013-05-10 20:58:59

+0

@NickTsui你可能不得不写一个包装器。 – 2013-05-10 21:53:44

+0

如何编写包装?我发现了一些源代码,但它们似乎都可以访问托管的C#代码,这是我没有的。 – 2013-05-12 20:47:16

1

使用C++/CLI,您的本地DLL可以是混合模式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是你的朋友。