前段时间我用过C ++和我正在尝试在c#中使用简单的itk。我看过MICCAI 2011教程,我正在努力开始。我正在使用Windows 7 64位计算机和Visual Studio Ultimate 2010。 根据{{3}}我应该能够解压缩并将.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?
由于
答案 0 :(得分:0)
嗨Federico,
您收到的错误提供了以下提示: “试图加载格式不正确的程序。”
当.NET程序试图访问a中的函数时,会发生此错误 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
干杯,丹