3

我在以下代码的最后一行出现异常(对不起格式,不会让我以任何其他方式发布):

LeadHelper.Unlock(); 
RasterCodecs codecs = new RasterCodecs(); 
string imageLocation = @"...path...\Barcodes.tif"; 
RasterImage srcImage = codecs.Load(imageLocation); 

异常内容如下:

System.BadImageFormatException:无法加载文件或程序集“Leadtools.Codecs,版本=17.5.0.0,Culture=neutral,…………”或其依赖项之一。试图引导格式不正确的程序。

为了试图摆脱这个异常,我引用了所有可能的 Leadtools.Codecs.* DLL、Leadtools.dll ......几乎我们可能引用的每一个 Leadtools dll。

对于我的包含,我包括 Leadtools、Leadtools.Barcode、Leadtools.Codecs、Leadtools.Codecs.Tif、Leadtools.Codecs.Fax 和 Leadtools.Forms

这是我正在制作的用于读取条形码的测试控制台应用程序... VS2010 C#。

另外,我绝对可以访问该文件,它是对网络文件的引用,但尝试在本地引用它,检查权限等

4

7 回答 7

6

该消息通常意味着您正在尝试在 64 位系统上加载 32 位 DLL,反之亦然。

验证您是否拥有正确版本的 DLL 及其依赖项。

于 2012-09-04T14:05:49.770 回答
3

到tnw:

这是来自 LEAD 支持的 Daoud。关于我们的映像 .NET DLL 的不同构建,每个 DLL 有 4 个不同的副本(不包括 Silverlight 或 WinRT 构建),它们是:

  • 32 位 .NET 4
  • 64 位 .NET 4
  • 32 位 .NET 2 到 3.5
  • 64 位 .NET 2 到 3.5

这意味着不同用户在此处发布的建议大多是正确的。您应该为您的平台和框架版本使用正确的 DLL 构建。但是,如果您在使用我们的工具包时仍然遇到任何问题,请给我们发送电子邮件至 support@leadtools.com,我们将与您一起解决问题。我们通常会在同一工作日内回复,最迟不迟于第二天。

还要确保在运行时加载了正确的 DLL,因为如果您的 PATH 或 GAC 包含 DLL 的多个副本,则可能会加载错误的构建。

关于 Ivan Leonenko 回复的最后一点说明:所提供的信息对于我们的多媒体工具包过滤器和编解码器用户来说是正确的。但是,tnw 似乎正在使用我们的映像 .NET 程序集,它们是不同的 .NET DLL,并且没有“包装器”。

于 2013-05-16T12:34:52.753 回答
3

在 IIS 中将 Enable 32 bit Application in Your Application Pool 设置为 true,然后尝试。我认为它会起作用,因为这是与平台相关的问题。

于 2013-06-26T10:08:42.537 回答
2

BadImageFormatException 是由平台不匹配引起的。当 Leadtools 程序集针对 x64 编译时,您的项目中的目标是 x86,反之亦然。

要解决此问题,请查看 Visual Studio 中项目的属性。该平台位于构建选项卡上,类似于 x86、x64 或 AnyCPU。

您可能必须使用配置管理器(位于构建菜单下)来添加另一个平台。

这是包含更多信息的 Microsoft 支持文章

于 2012-09-04T14:09:18.577 回答
0

看起来您针对该 dll 的框架是错误的。尝试切换引用 dll 的 csproj 的框架。

我不确定leadtools 是在什么框架中构建的,但请尝试在其他所有框架(4.0 客户端、4.0、2.0 等)中构建。

更多信息:http: //msdn.microsoft.com/en-us/library/bb398202.aspx

于 2012-09-04T14:00:30.083 回答
0

您正在尝试引用错误的程序集。您应该从 LEAD SDK for 4.0 或 2.0 .NET Framework 的 dist 文件夹中为您的案例尝试包装器。

我正在使用他们的屏幕截图和编解码器,并且我只引用了需要的文件(.NET 包装器): LEncH2644.dll LMISOMux.dll LMScrCap2.dll LMVRGBxf.dll

但是您应该单独交付 LEAD 的核心文件:Leadtools.Multimedia.dll、ltmm.manifest、ltmm175.dll、DSKernel2.dll。最后两个必须在系统上注册(regsvr32)。

Leadtools.Multimedia.dll 必须在锁定/解锁组件的项目中引用。

于 2012-09-04T14:27:10.467 回答
0

我已经安装了 Microsoft Visual C++ 2008 & 2010 SP1 Redistributable Package (x86)。

然后,在 IIS 中将应用程序池中的 32 位应用程序启用为 True。它工作得很好。

于 2018-08-20T22:10:07.253 回答