c# - 从 .NET 2.0 向下迁移到 .NET 1.1 - DllImport 不再有效

标签 c# interop .net-2.0 pinvoke .net-1.1

我们的一个应用程序在 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 的过程中出现错误,但我不明白为什么会出现这种情况(我什至跟踪代码以查看参数的大小, iohandle, 它们在这两种情况下是一样的)

  • ...我想不出的东西!

非常感谢您的专业知识!

最佳答案

哦 - 我刚刚意识到我有一个 DLL 名称冲突引发了这个问题(.NET 项目和非托管 DLL 具有相同的名称)......哎哟!抱歉,那我的问题完全没有意义。无论如何感谢您的阅读!

关于c# - 从 .NET 2.0 向下迁移到 .NET 1.1 - DllImport 不再有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5027508/

相关文章:

java - 以互操作方式序列化消息的最佳方式是什么?

c# - 我可以在我的 C# 项目中使用用 C++ 编写的 DLL 吗?

Java 加密 API 与不同平台

c# - 如何以编程方式检测副作用(编译时或运行时)?

c# - 使用 .NET Core 5 确定屏幕尺寸?

c# - 如何使用反射设置类型为 List<CustomClass> 的属性

c# - 如何在 .Net 2.0 的 sectionGroup applicationSettings 中按名称获取所有部分

c# - 淡入淡出启动画面

c# - 静态助手类与实例类上的静态方法与扩展方法

c# - 空字符串的目的是什么?