[Insight-users] Problem Wrapper ITK to C#

agatte wiatrak11 at poczta.onet.pl
Thu Apr 12 07:48:41 EDT 2012


Hi Dan,

Thanks for advice. 
I have already made it. 
It was a problem with conversion std::String to string in C#.
I have already changed const char * plik  and  string plik in c#. 

agatte



Dan Mueller-2 wrote:
> 
> Hi,
> 
> Having a look at the code does not reveal any obvious issues.
> 
> I never wrap C++ code for C# by hand, but always use SWIG:
>     http://www.swig.org/
> 
> The code generated by SWIG seems to be essentially identical to your
> code (see below).
> 
> I suspect the issue is with the naming of the native dll. Are you sure
> the name of the native dll is "ProgramITK.dll"? And this dll is in the
> binary directory of the C# program you are executing? Try adding the
> EntryPoint parameter to the DllImport attribute as demonstrated in the
> SWIG generated code below.
> 
> Sorry I could not be of more help.
> 
> Regards, Dan
> 
>> swig -c++ -csharp -v NativeMethods.i
> 
> /* File : NativeMethods.i */
> %include "std_string.i" // Required for std::string
> %module "NativeMethods"
> %{
> #include "NativeMethods.h"
> %}
> %include "NativeMethods.h"
> 
> /* File : NativeMethods.h */
> #include "itkImage.h"
> #include "itkImageFileReader.h"
> #include "itkImageFileWriter.h"
> void KonwersjaPliku(std::string plikWE, std::string plikWY)
> {
>   typedef signed short PixelType;
>   const unsigned int Dimension = 3;
>   typedef itk::Image< PixelType, Dimension > ImageType;
>   typedef itk::ImageFileReader< ImageType > ReaderType;
>   typedef itk::ImageFileWriter<ImageType> WriterType;
>   // Read input image
>   ReaderType::Pointer reader = ReaderType::New();
>   reader->SetFileName(plikWE);
>   reader->Update();
>   std::cout << reader << std::endl;
>   // Write output image
>   WriterType::Pointer writer = WriterType::New();
>   writer->SetInput(reader->GetOutput());
>   writer->SetFileName(plikWY);
>   writer->Update();
> }
> 
> /* File : NativeMethods_wrap.cxx (generated by SWIG) */
> #define SWIGEXPORT __declspec(dllexport)
> #define SWIGSTDCALL __stdcall
> extern "C" {
> SWIGEXPORT void SWIGSTDCALL CSharp_KonwersjaPliku(char * jarg1, char *
> jarg2) {
>   std::string arg1 ;
>   std::string arg2 ;
>   if (!jarg1) {
>    
> SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException,
> "null string", 0);
>     return ;
>   }
>   (&arg1)->assign(jarg1);
>   if (!jarg2) {
>    
> SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException,
> "null string", 0);
>     return ;
>   }
>   (&arg2)->assign(jarg2);
>   KonwersjaPliku(arg1,arg2);
> }
> }
> 
> /* File : NativeMethodsPINVOKE.cs (generated by SWIG) */
> [DllImport("NativeMethods", EntryPoint="CSharp_KonwersjaPliku")]
> public static extern void KonwersjaPliku(string jarg1, string jarg2);
> 
> On 10 April 2012 19:08, agatte <wiatrak11 at poczta.onet.pl> wrote:
>>
>> Hi All Users ;)
>>
>>
>> I have a problem with wrapper  to c# .
>> I have already created method in ITK.
>> It goes good. Program in C3 build good but I can't debug this project.
>> Could anyone look at my code ?
>> I would appreciate for any help.
>>
>> During debuging I received a message :
>>
>> An unhandled exception of type 'System.EntryPointNotFoundException'
>> occurred
>> in WrapperITK.exe
>>
>>
>>
>>
>> Code in ITK (C++) :
>>
>>
>> #include "itkOrientedImage.h"
>> #include "itkGDCMImageIO.h"
>> #include "itkGDCMSeriesFileNames.h"
>> #include "itkImageSeriesReader.h"
>> #include "itkImageFileWriter.h"
>>
>> #include "itkCommand.h"
>> #include "itkImage.h"
>> #include "itkImageFileReader.h"
>> #include "itkImageFileWriter.h"
>> using namespace std;
>>
>> extern "C"
>> {
>>        __declspec(dllexport) void __stdcall KonwersjaPliku(std::string
>> plikWE,
>> std::string plikWY)
>> {
>>
>>
>>
>> typedef signed short PixelType;
>> const unsigned int Dimension = 3;
>> typedef itk::Image< PixelType, Dimension > ImageType;
>> typedef itk::ImageFileReader< ImageType > ReaderType;
>>
>>        // read dcm file
>>        ReaderType::Pointer reader = ReaderType::New();
>>        reader->SetFileName(plikWE);
>>        reader->Update();
>>        std::cout << reader<< std::endl;
>>
>>       // Save  VTK image file
>>       typedef itk::ImageFileWriter<ImageType> WriterType;
>>       WriterType::Pointer writerVTK = WriterType::New();
>>       writerVTK->SetInput(reader->GetOutput());
>>       writerVTK->SetFileName(plikWY);
>>       writerVTK->Update();
>>
>>
>> }
>> }
>>
>>
>> Code in C# :
>>
>> using System;
>> using System.Collections.Generic;
>> using System.Linq;
>> using System.Text;
>> using System.Runtime.InteropServices;
>>
>> namespace WrapperITK
>> {
>>
>>    internal static class UnsafeNativeMethods
>>    {
>>        const string dllLocation = "ProgramITK.dll";
>>
>>        [DllImport(dllLocation)]
>>        public static extern void KonwersjaPliku(string plikWE, string
>> plikWY);
>>
>>    }
>> }
>>
>>
>> Code in C# (Form1) :
>>
>> using System;
>> using System.Collections.Generic;
>> using System.ComponentModel;
>> using System.Data;
>> using System.Drawing;
>> using System.Linq;
>> using System.Text;
>> using System.Windows.Forms;
>> using System.Runtime.InteropServices;
>>
>> namespace WrapperITK
>> {
>>    public partial class Form1 : Form
>>    {
>>        public Form1()
>>        {
>>            InitializeComponent();
>>            Run();
>>        }
>>
>>        public static void Run()
>>        {
>>            string plikDCM = "plikDCM.dcm";
>>            string plikVTK = "plikVTK.vtk";
>>            UnsafeNativeMethods.KonwersjaPliku(plikDCM, plikVTK);
>>        }
>>
>>        private void Form1_Load(object sender, EventArgs e)
>>        {
>>
>>        }
>>
>>
>>    }
>> }
>>
>> I would appreciate for any help ;)
> _____________________________________
> 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
> 
> 

-- 
View this message in context: http://old.nabble.com/Problem-Wrapper-ITK--to-C--tp33660249p33674700.html
Sent from the ITK - Users mailing list archive at Nabble.com.



More information about the Insight-users mailing list