我在Google中找到了很多关于如何从.NET代码调用非托管DLL中的API函数的示例,但是如何从非托管代码实例化对象呢?从.NET实例化非托管类
我目前正在修补一个旧的遗留应用程序在工作中(并且我还不确定我们是否能够做任何事情,但是修补程序和研究我必须)该公司希望迁移到.NET。看起来这是之前尝试过的,现在我正在仔细研究。最常见的编译错误是对项目不理解的旧DLL的引用。
在这一行代码的一个例子是:
Dim cAccounts As HSVMETADATALib.HsvAccounts
有一个损坏的引用在项目库中,我相信这是一些向导驱动的尝试的结果,只是口一定预.NET项目到.NET。我有它寻找DLL,但添加到它的引用返回错误:
A reference to 'HFMConstants.dll' could nto be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component.
现在,我知道什么这个DLL。而且我有很多很有 pre.NET Windows编程的经验。因此,我一直在网上寻找有关在此代码中使用旧DLL的信息,并且都侧重于调用DLL中的API函数。但是,仔细查看这些代码,关于API函数和更多关于对象的内容就更少了。那么我将如何去实例化这些对象之一的实例呢?
(请注意,这是其中一种情况,我们甚至不知道我们是否有正确的源代码,没有文档,没有任何关于此应用程序的所有权和维护的内容,能够实例化来自外部DLL的对象的障碍是来自某些未知且可能无法访问的第三方来源,它将减少大部分编译器错误并帮助我们进入更多的代码,即使获得至少一个编译精简版。)
这是模糊的,但它是值得一问:)
我喜欢这个Dependency Walker,漂亮的小工具。当然,这一个样本DLL有一个大型的依赖关系树(其中一些没有找到,我想这将是另一个有趣的路障)。我不确定这里面的信息对于这项工作特别有用,但我现在可以放心地忽略。 – David 2010-08-19 17:02:45