我正要求从我们的应用程序调用两个dll
调用。这两个dlls
来自其他集团和其他公司。阅读了一些关于托管和非托管的内容。我宁愿做托管呼叫。但是,无论是使用托管还是非托管都只是调用方的决定,还是取决于被调用方?所有dll都可以使用托管代码调用?如果被调用者也是一个因素,我怎么能知道这个DLL可以用托管代码调用?C#托管的dll调用或非托管的dll调用?
1
A
回答
1
如果DLL是用托管代码编写的,它将是一个托管调用。否则,你将不得不做一个非托管电话。这两个部分都必须进行管理才能成为受管理的电话。
1
我只是指.net dll或非.Net调用。
与不受控制的代码库进行互操作时,托管代码将消除风险级别,因为您拥有相同的.NET数据类型和调用语义相同。
根据你的DLL写的是什么语言,如果它不是.Net,你可能会遇到数组顺序以及如何将对象引用推入堆栈的问题。另外,如果您直接在给定对象/原始值上执行突变,您可能会被迫将内存中的对象固定调用DLL。
1
您肯定需要更多关于您尝试使用的DLL的信息。
如果DLL是非托管的,您将需要有关导出函数的其他信息,以便您可以编写适当的P/Invoke信息来进行调用。例子见this MSDN Article或http://pinvoke.net。
如果DLL是基于COM或.NET的,那么您可以通过Visual Studio在项目中添加引用并直接访问它们。
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
相关问题
- 1. 从C#调用非托管C++类DLL#
- 2. 从C调用非托管dll困难#
- 3. 如何从托管C++调用非托管DLL
- 4. 从VB调用非托管的DLL
- 5. 在非托管C++ dll中使用托管c#dll
- 6. VC++和C#如何编写托管DLL或非托管DLL?
- 7. 非托管的DLL
- 8. 中止调用到非托管DLL
- 9. 从托管代码调用非托管DLL函数时出错
- 10. 从C#.exe调用非托管C++ .dll的函数
- 11. 在c#项目中使用托管dll(它使用非托管dll)
- 12. 在C中的非托管DLL的调用约定#
- 13. 如何从C#代码调用非托管dll中的函数?
- 14. 调用从C#非托管的DLL。取2
- 15. C++/CLI - 调用DLL中定义的非托管函数
- 16. 从C#调用非托管.dll的性能
- 17. 调用从C#非托管的DLL也许我错了编组
- 18. C中的C++非托管DLL#
- 19. 托管C DLL调用C#DLL,FileNotFoundException异常
- 20. 从SQL Server 2008调用非托管C/C++ DLL函数
- 21. 从C#调用非托管C++ VS 6.0 MFC dll
- 22. 从C#windows服务调用C++ dll(非托管代码)
- 23. 如何使用CString调用非托管C++ DLL参考
- 24. 从非托管dll中的QThread回调到托管C++主线程
- 25. 动态链接托管的C++类库中的非托管dll
- 26. 调试托管的.NET代码从非托管C++调用
- 27. 卡住调用从非托管C++调用托管CLI方法
- 28. 添加托管的DLL依赖于非托管C++项目
- 29. .NET Web服务 - 如何调用非托管C DLL
- 30. 非托管dll代码
我怎么知道该DLL被托管代码编写的?结果中的任何指标都会发送给我? – 5YrsLaterDBA 2010-06-15 14:22:02
该组件的文档大多是一个很好的指标 – GvS 2010-06-15 14:23:58
@ 5YrsLaterDBA:尝试右键单击它并执行属性,并查看它是否在版本选项卡中具有Assembly版本,如果是,则可能是托管的。为了确保,只要尝试在Visual Studio中添加对它的引用,如果它不是托管DLL或COM组件,它就会失败。 – 2010-06-15 14:26:50