我们的一个应用程序在 C#/.NET 1.1/VS2003 中,需要保持原样:-(
我需要使用另一个 .NET 2.0 中的 C# 程序集的代码:由于技术限制(.NET 1.1 是强制性的,所以无法直接使用 .NET 2.0),我将代码从 .NET 2.0 项目中取出来尝试使其适应 .NET 1.1(并不容易,因为没有泛型,部分禁止等)。
我的 1.1 代码现在可以编译,但由于对非托管 DLL 的 P/Invoke 而导致 EntryPointNotFoundException,因此在执行时失败。
奇怪的是,我尝试首先在 .NET 2.0 中验证我的更改,并且导入 DLL 没有任何问题:
[DllImport(FreeImageLibrary, EntryPoint = "FreeImage_GetFileTypeFromHandle")]
public static extern FREE_IMAGE_FORMAT GetFileTypeFromHandle(ref FreeImageIO io, fi_handle handle, int size);
两个项目的声明是一样的,当然DLL也是一样的。 dumpbin.exe 给出签名:
_FreeImage_GetFileTypeFromHandle@12
我也试过用这个名字来声明入口点,但这也不管用,还拼命想改变CallingConvention
, CharSet
, 精确拼写
...不可能!
这可能是:
DllImport
在 .NET 1.1 和 2.0 之间的工作方式发生了变化,但我没有发现任何以这种方式发生的事情从我的代码迁移到 .NET 2.0 到 1.1 的过程中出现错误,但我不明白为什么会出现这种情况(我什至跟踪代码以查看参数的大小,
io
和handle
, 它们在这两种情况下是一样的)...我想不出的东西!
非常感谢您的专业知识!
最佳答案
哦 - 我刚刚意识到我有一个 DLL 名称冲突引发了这个问题(.NET 项目和非托管 DLL 具有相同的名称)......哎哟!抱歉,那我的问题完全没有意义。无论如何感谢您的阅读!
关于c# - 从 .NET 2.0 向下迁移到 .NET 1.1 - DllImport 不再有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5027508/