Руководство по установке Simple-ITK для C#

Я использовал ITK с C++ некоторое время назад, и сейчас я пытаюсь использовать простой itk в C#. Я посмотрел учебник MICCAI 2011 и пытаюсь начать. Я использую 64-битную машину Windows 7 и Visual Studio Ultimate 2010. Согласно этой вики, я должен иметь возможность просто разархивировать и ссылаться на.dll в моем проекте, и он должен работать. Я могу добавить 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, и я все еще получаю ту же ошибку.

Любые идеи о том, как решить эту проблему, или как запустить SimpleItk и запустить его без фактической сборки его из исходного кода с помощью CMAKE?

Спасибо

1 ответ

Решение

Дэн Мюллер из 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", вам следует использовать настройки Win32 для x86.

Чтобы ответить на другой вопрос: вам нужно всего лишь добавить "SimpleITKCSharpManaged.dll" к ссылкам вашей программы, но "SimpleITKCSharpNative.dll" должен быть в пути поиска (самый простой способ добиться этого - поместить его в двоичный каталог рядом с ваша программа исполняемая и управляемая dll). Это объясняется на следующей странице (эта страница предназначена для Linux, но такой же подход необходим и для Windows): http://www.itk.org/Wiki/ITK/Release_4/SimpleITK/GettingStarted/Visual_guide_to_building_on_Linux

Пожалуйста, дайте нам знать, как вы поживаете.

НТН

Ура, Дэн

Другие вопросы по тегам