C#托管dll调用或非托管dll调用?

时间:2010-06-15 14:17:59

标签: c#

我要求从我们的应用程序中进行两次dll次调用。这两个dlls来自其他集团和其他公司。已经阅读了一些关于托管和非托管的内容。我宁愿做有人值守的电话。但是,使用托管还是非托管只是调用者的决定,还是取决于被调用者?可以使用托管代码调用所有dll吗?如果被调用者也是一个因素,我怎么知道可以用托管代码调用这个dll?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我只是意味着.Net dll或非.Net调用。

托管代码在与不受控制的代码库进行互操作时将消除一定程度的风险,因为您具有相同的.Net数据类型和调用语义是相同的。

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

答案 2 :(得分:1)

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

如果DLL不受管理,您将需要有关导出函数的其他信息,以便您可以编写适当的P / Invoke信息来进行调用。有关示例,请参阅this MSDN Articlehttp://pinvoke.net

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

答案 3 :(得分:0)

我建议用.NET编写DLL来处理托管代码调用。如果将.net程序集设置为COM可见并使用regasm工具,则可以注册并使用非托管代码调用同一对象。

[ComVisible(true)]

http://edn.embarcadero.com/article/32754

http://msdn.microsoft.com/en-us/library/tzat5yw6(VS.71).aspx