Руководство по установке 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
Пожалуйста, дайте нам знать, как вы поживаете.
НТН
Ура, Дэн