2012-05-31 139 views
2

我前段时间用C++与ITK,现在我想在c#中使用简单的itk。我已经看过MICCAI 2011教程,我正在尝试着手。我正在使用Windows 7 64位计算机和Visual Studio Ultimate 2010. 根据this wiki,我应该能够将.dlls解压缩并引用到我的项目中,并且它应该可以正常工作。 我可以将SimpleITKCSharpManaged.dll添加到我的参考。但是我无法将SimpleITKCSharpNative.dll添加到我的引用中。它给我错误: 请确保该文件是可访问的,并且它是一个有效的程序集或COM组件。Simple-ITK安装教程C#

然后我尝试运行一个简单的控制台应用程序

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复制到我的斌/调试目录和我米仍然得到相同的错误。

有关如何解决这个问题的任何想法,或者如何在没有使用CMAKE从源代码本地构建它的情况下启动并运行SimpleItk?

感谢来自ITK

回答

0

丹穆勒回答我的问题。以下是他说的话:

嗨费德里科,

您收到的错误给出了提示:“试图加载程序格式不正确”

当.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

干杯,丹