[Insight-users] ITK and C++\CLI

Dan Mueller dan.muel at gmail.com
Wed Feb 20 01:26:49 EST 2013


Hi Anthony,

> So, does a simple solution exist?

There are a number of options available to you.

1. Use the SimpleITK C# (.NET) wrappers:
http://sourceforge.net/projects/simpleitk/files/SimpleITK/

Although the wrappers are called C#, it is a .NET assembly which can
be used directly from C++\CLI.

An example would be:
// =========================
#include "stdafx.h"
#using <SimpleITKCSharpManaged.dll> // Location specified using /AI switch
using namespace System;

int main(array<System::String ^> ^args)
{
    auto image = itk::simple::SimpleITK::ReadImage("C:/Temp/cthead1.png");
    Console::WriteLine(image);
    return 0;
}
// =========================

2. It is possible to compile to ITK with the /clr switch. There are
some instructions on a really old thread here:
http://public.kitware.com/pipermail/insight-users/2006-October/019648.html

The discontinued ManagedITK provided a .NET wrapper around ITK using
C++\CLI. The source code may give you some inspiration for correctly
setting up your Visual Studio project:
http://code.google.com/p/manageditk/source/browse/trunk

Essentially, ManagedITK used CMake to generate a normal C++ vcproj
file, and then ran the "ConfigureProject" utility to automagically
hack the vcproj file to compile ITK with /clr:
http://code.google.com/p/manageditk/source/browse/trunk#trunk%2FUtilities%2FConfigureProject
http://manageditk.googlecode.com/svn/trunk/FinishCMake.bat.in

3. You could use P/Invoke to access a pure unmanaged C++ DLL which
encapsulates all your ITK functionality from the managed C++/CLI
environment. A step-by-step guide can be found here:
http://www.itk.org/Wiki/ITK/Using_ITK_from_.NET

I hope one of these options suits your purposes.

Cheers, Dan

On 20 February 2013 15:17, Anthony Baker <anthony.ww.baker at gmail.com> wrote:
> I would like to use ITK on an existing project and am interested in the
> simplest path to success.  I am using c++\cli in visual studio.  I have
> incorporated OpenCV and GDAL into the project and have many classes and win
> form windows incorporated.
>
> I thought (naively) that I could treat ITK in a similar way to OpenCV.  I
> compiled openCV into a set of dlls.  I then compiled my project with the
> includes and linked against the .libs and finally included the opencv dlls
> with my final deployment exe.
>
> I tried this method with ITK but it didn't work.  I was able to compile and
> link by added the right headers and .lib files but when I ran the project it
> immediately failed with some sort of load errors.  To show how simple I
> started, I only included a single header file to my existing project.
>
> I thought maybe if I compiled the ITK project as CLR things would be better.
> The upshot of that is that I was never able to even compile in that mode due
> to the .c files not compiling as c++ (I tried with every effort from the
> cmake side to make that happen including trying to change the cmake code -
> ha).
>
> So, does a simple solution exist?  Can someone provide an example that
> works?
>
> Please help with my, now, obsession to make this work!
>
> Many Thanks,
>
> Anthony
>
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.php
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-users
>


More information about the Insight-users mailing list