我试图找出如何能工作:机DLL调用一个.NET的DLL
- 我有一个.NET的DLL,说NETDll.dll,我没有源代码进行修改。
- 我想使用NETDll.dll在我的C++项目,该项目将创建一个本地的dll,说NativeDll.dll
因此,这里是我认为问题出在哪里(我可能是错的tho):
- 由于我的NativeDll.dll是本机的,因此它不能是CLR/CLI dll。本机dll没有运行时引擎,但CLR的确。
我该怎么做?感谢您的任何建议。
我试图找出如何能工作:机DLL调用一个.NET的DLL
因此,这里是我认为问题出在哪里(我可能是错的tho):
我该怎么做?感谢您的任何建议。
你将不得不在.NET程序集中公开某些东西。
使用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是你的朋友。
我该怎么做?我没有访问.NET DLL的源代码 – 2013-05-10 20:58:59
@NickTsui你可能不得不写一个包装器。 – 2013-05-10 21:53:44
如何编写包装?我发现了一些源代码,但它们似乎都可以访问托管的C#代码,这是我没有的。 – 2013-05-12 20:47:16