2

前段时间我在 C++ 中使用过 ITK,现在我正在尝试在 C# 中使用简单的 itk。我查看了 MICCAI 2011 教程,我正在尝试开始。我使用的是 Windows 7 64 位机器和 Visual Studio Ultimate 2010。根据这个 wiki,我应该能够解压缩并将 .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 目录中,但仍然遇到相同的错误。

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

谢谢

4

1 回答 1

0

ITK 的 Dan Mueller 回答了我的问题。这是他不得不说的:

嗨,费德里科,

您收到的错误提示:“尝试加载格式不正确的程序。”

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

请让我们知道您的进展情况。

高温高压

干杯,丹

于 2012-06-19T00:48:27.753 回答