2010-06-15 149 views
1

我正要求从我们的应用程序调用两个dll调用。这两个dlls来自其他集团和其他公司。阅读了一些关于托管和非托管的内容。我宁愿做托管呼叫。但是,无论是使用托管还是非托管都只是调用方的决定,还是取决于被调用方?所有dll都可以使用托管代码调用?如果被调用者也是一个因素,我怎么能知道这个DLL可以用托管代码调用?C#托管的dll调用或非托管的dll调用?

回答

1

如果DLL是用托管代码编写的,它将是一个托管调用。否则,你将不得不做一个非托管电话。这两个部分都必须进行管理才能成为受管理的电话。

+0

我怎么知道该DLL被托管代码编写的?结果中的任何指标都会发送给我? – 5YrsLaterDBA 2010-06-15 14:22:02

+1

该组件的文档大多是一个很好的指标 – GvS 2010-06-15 14:23:58

+0

@ 5YrsLaterDBA:尝试右键单击它并执行属性,并查看它是否在版本选项卡中具有Assembly版本,如果是,则可能是托管的。为了确保,只要尝试在Visual Studio中添加对它的引用,如果它不是托管DLL或COM组件,它就会失败。 – 2010-06-15 14:26:50

1

我只是指.net dll或非.Net调用。

与不受控制的代码库进行互操作时,托管代码将消除风险级别,因为您拥有相同的.NET数据类型和调用语义相同。

根据你的DLL写的是什么语言,如果它不是.Net,你可能会遇到数组顺序以及如何将对象引用推入堆栈的问题。另外,如果您直接在给定对象/原始值上执行突变,您可能会被迫将内存中的对象固定调用DLL。

1

您肯定需要更多关于您尝试使用的DLL的信息。

如果DLL是非托管的,您将需要有关导出函数的其他信息,以便您可以编写适当的P/Invoke信息来进行调用。例子见this MSDN Articlehttp://pinvoke.net

如果DLL是基于COM或.NET的,那么您可以通过Visual Studio在项目中添加引用并直接访问它们。