我以前在c++中使用过ITK,现在我正在尝试在c#中使用简单的itk。我已经看过MICCAI2011教程,我正在试着开始。我使用的是Windows 7 64位计算机和Visual Studio Ultimate 2010。根据this wiki的说法,我应该能够将.dlls解压并引用到我的项目中,它应该可以工作。我可以将SimpleITKCSharpManaged.dll添加到我的推荐人中。但是,我无法将SimpleITKCSharpNative.dll添加到我的引用中。它给我一个错误:请确保文件是可访问的,并且它是有效的程序集或COM组件。
然后,我尝试运行一个简单的控制台应用程序
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using itk.simple;
namespace TestSimpleItk
{
class Program
{
static void Main(string[] args)
{
string inputFilename = "001.png";
if (File.Exists(inputFilename))
{
try
{
var input = SimpleITK.ReadImage(inputFilename);
var binary = SimpleITK.BinaryThreshold(input, 100, 255, 255, 0);
SimpleITK.WriteImage(binary, "cthead1-binary.png");
}
catch (Exception ex)
{
Console.WriteLine("{0}", ex);
}
}
else
{
Console.WriteLine("File '{0}' does not exist", inputFilename);
}
}
}
}引发的异常是:{“'itk.simple.SimpleITKPINVOKE‘的类型初始值设定项抛出了一个异常。”}而内部异常是:{“试图加载格式不正确的程序。(来自HRESULT的异常: 0x8007000B)"}
我尝试将SimpleITKCSharpNative.dll复制到我的bin/debug目录中,但仍然收到相同的错误。
关于如何解决这个问题,或者如何在不使用CMAKE从源代码本地构建SimpleItk的情况下启动并运行它,有什么想法吗?
谢谢
发布于 2012-06-19 08:48:28
ITK的丹·米勒回答了我的问题。以下是他不得不说的话:
你好费德里科,
您收到的错误提示:“有人试图加载格式不正确的程序。”
当.NET程序试图访问使用不同体系结构构建的dll中的函数时,会出现此错误;例如,请参阅此处:http://blogs.msdn.com/b/arvindsh/archive/2009/06/21/tip-of-the-day-an-attempt-was-made-to-load-a-program-with-an-incorrect-format-net-p-invoke-issue.aspx
解决此问题的最简单方法是使用与SimpleITK相同的建筑设置。例如,如果您下载了"SimpleITK-0.4.0-CSharp-Win64-anycpu.zip“,那么您的调用程序应该使用x64 AnyCPU设置来构建。如果你下载了"SimpleITK-0.4.0-CSharp- Win32 -x86.zip“,你应该使用x86 Win32设置。
回答您的另一个问题:您只需要将"SimpleITKCSharpManaged.dll“添加到程序引用中,但"SimpleITKCSharpNative.dll”必须位于探测路径中(实现此目的的最简单方法是将其放在程序可执行文件和托管dll旁边的二进制目录中)。下面的页面对此进行了解释(该页面适用于Linux,但同样的方法也适用于Windows ):http://www.itk.org/Wiki/ITK/Release_4/SimpleITK/GettingStarted/Visual_guide_to_building_on_Linux#A_simple_C.23_program
请让我们知道你的进展情况。
HTH
干杯,丹
https://stackoverflow.com/questions/10826487
复制相似问题