C#托管dll调用还是非托管dll调用?

C#托管dll调用还是非托管dll调用?,c#,C#,我要求从我们的应用程序执行两个dll调用。这两个DLL来自其他集团和其他公司。已经读了一些关于托管和非托管的内容。我想打管理电话。但是,使用托管还是非托管只是调用方的决定,还是还取决于被调用方?是否可以使用托管代码调用所有DLL?如果被调用方也是一个因素,我怎么知道这个dll可以用托管代码调用呢?如果dll是用托管代码编写的,那么它将是一个托管调用。否则,您将不得不执行非托管调用。这两个部分都必须进行管理才能成为托管调用。我只是指.Net dll或非.Net调用 托管代码在与不受控制的代码库进行

我要求从我们的应用程序执行两个
dll
调用。这两个
DLL
来自其他集团和其他公司。已经读了一些关于托管和非托管的内容。我想打管理电话。但是,使用托管还是非托管只是调用方的决定,还是还取决于被调用方?是否可以使用托管代码调用所有DLL?如果被调用方也是一个因素,我怎么知道这个dll可以用托管代码调用呢?

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

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

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


如果DLL不是.Net,则可能会在数组顺序以及如何将对象引用推送到堆栈上出现问题,这取决于DLL是用什么语言编写的。此外,如果DLL直接对给定的对象/原语值执行突变,则可能会强制您锁定内存中的对象以安全地调用DLL。

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

如果DLL是非托管的,则需要有关导出函数的其他信息,以便编写适当的p/Invoke信息来进行调用。有关示例,请参见或


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

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

[ComVisible(true)]


我如何知道DLL是用托管代码编写的?结果中的任何指标发送给我吗?该组件的文档大部分都是好的indicator@5YrsLaterDBA:尝试右键单击它并执行属性,然后在“版本”选项卡中查看它是否具有程序集版本,如果是,则它可能已被管理。为了确保这一点,只需尝试在Visual Studio中添加对它的引用,如果它不是托管DLL或COM组件,它将失败。不过,正如GvS所说,希望您能从供应商那里获得某种文档。您需要知道dll所依赖的.Net framework的哪个版本(如果它们是受管理的),等等@ho1:如何添加对dll的引用?