C# 找不到名为';FreeImage_GetFileTypeU';在DLL中';FreeImageNET';

C# 找不到名为';FreeImage_GetFileTypeU';在DLL中';FreeImageNET';,c#,dllimport,freeimage,C#,Dllimport,Freeimage,我刚刚下载了FreeImage 3.15.4 Win32,我正在尝试浏览他们的C#示例。我有一台带有Visual Studio Express 2010的64位Windows 7计算机,因此我将示例重新编译为64位,如下所述(/)。我还必须更改FreeImageStaticImports.cs中“FreeImageLibrary”字符串的名称,以便启动示例应用程序(生成的DLL名为FreeImageNet,而不是示例预期的FreeImage) 但是,当我运行这些示例时,每当我调用FreeImag

我刚刚下载了FreeImage 3.15.4 Win32,我正在尝试浏览他们的C#示例。我有一台带有Visual Studio Express 2010的64位Windows 7计算机,因此我将示例重新编译为64位,如下所述(/)。我还必须更改FreeImageStaticImports.cs中“FreeImageLibrary”字符串的名称,以便启动示例应用程序(生成的DLL名为FreeImageNet,而不是示例预期的FreeImage)

但是,当我运行这些示例时,每当我调用FreeImage函数时,就会出现“无法在DLL“FreeImageNET”中找到名为“FreeImage_GetFileTypeU”的入口点”错误。这些示例引用了包含DLLImport语句的库,所以我不确定这里有什么问题。有没有人对FreeImage和C#有经验,可以提供一些建议?谢谢

我还必须更改“FreeImageLibrary”字符串的名称

这就是你陷入麻烦的原因。这里涉及两个DLL。FreeImage.dll是本机dll,它包含FreeImage_GetFileTypeU导出。FreeImageNET.dll是一个托管类库,包含本机dll的包装器,它没有异常消息告诉您的导出

您应该做的是从源代码重建本机DLL,以便获得64位版本的FreeImage.DLL。那篇博文告诉了你怎么做。并提供了一个下载,ymmv


还必须将其复制到生成输出文件夹中,以便在运行时找到它。一个简单的方法是使用project+添加现有项将其添加到项目中,并将其“复制到输出目录”属性设置为“如果更新,则复制”。

我显然不知道自己在做什么。实际上,我将示例项目转换为x64,而不是本机FreeImage DLL。不幸的是,我似乎无法按照我链接的方向重建DLL。所有解决方案都无法使用Visual Studio Express 2010进行转换。我尝试使用提供的下载,但似乎不起作用。多亏了你的帮助,我把DLL放在了正确的位置,我就是不能让它们工作(不要在Express中尝试此操作。只需将C#项目的目标平台更改为x86,这样您就可以使用常规发行版。这在Express版本中也很难做到,您必须使用文本编辑器编辑项目文件。将“AnyCPU”更改为“x86”。只有在您有时间的情况下,免费软件才是免费的。根据您的建议,我回到了32位库,并能够让示例正常工作。结果表明,FreeImage似乎并不完全符合我的要求,但至少在此过程中我学到了一些东西。谢谢!这对我不起作用。我使用的是Linux(Mono,据说是受支持的)并且在不将
FreeImageLibrary
字符串更改为小写的情况下,它将找不到库,因为文件系统区分大小写。此外,当库最终链接时,除了库似乎拒绝所有内容之外,所有内容都正常工作,没有任何示例工作(它们不会崩溃,库只会一直返回错误)等等……我本以为会对
FreeImage.NET
提供更好的支持,但设置起来真是太难了。