<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
I believe the default calling convension in x86 machine is __cdecl instead of __stdcall.&nbsp; Try replace CallingConvention.StdCall with CallingConvention.Cdecl.<BR><BR>Xiaofeng<BR><BR><BR>&nbsp;<BR>
&gt; Date: Thu, 19 May 2011 08:08:54 -0700<BR>&gt; From: susana.garcia@oerc.ox.ac.uk<BR>&gt; To: insight-users@itk.org<BR>&gt; Subject: [Insight-users] PInvokeStackImbalance error when calling from VS2010 an ITK function defined in a dll.<BR>&gt; <BR>&gt; Hi,<BR>&gt; <BR>&gt; I'm working with ITK 3.20 and VS2010 in x86 machine. I created a dll with<BR>&gt; some itk funtions as follows:<BR>&gt; <BR>&gt; ____________<BR>&gt; <BR>&gt; extern "C"<BR>&gt; {<BR>&gt; __declspec(dllexport) int BinaryThresholdImageFilter( char *<BR>&gt; InputImageFile, char * OutputImageFile, char * LowerThreshold, char *<BR>&gt; UpperThreshold, char * OutsideValue, char * InsideValue)<BR>&gt; }<BR>&gt; <BR>&gt; ______________<BR>&gt; <BR>&gt; The call from VS 2010 C# is defined as follows: <BR>&gt; <BR>&gt; ________________-<BR>&gt; <BR>&gt; [DllImport("itkFilters.dll", CallingConvention =<BR>&gt; CallingConvention.StdCall)]<BR>&gt; public static extern int BinaryThresholdImageFilter(Byte[]<BR>&gt; InputImageFile, Byte[] OutputImageFile, Byte[] LowerThreshold, Byte[]<BR>&gt; UpperThreshold, Byte[] OutsideValue, Byte[] InsideValue);<BR>&gt; <BR>&gt; resultbinaryfilter = BinaryThresholdImageFilter(stbyteinputfilename,<BR>&gt; stbyteoutputfilename, stbytelowerthreshold, stbyteupperthreshold,<BR>&gt; stbyteoutsidevalue, stbyteindsidevalue);<BR>&gt; <BR>&gt; ______________<BR>&gt; <BR>&gt; This works with no problem at all using VS2008. But when I run this on<BR>&gt; VS2010 I get the following error: <BR>&gt; <BR>&gt; ______________<BR>&gt; <BR>&gt; PInvokeStackImbalance was detected<BR>&gt; Message: A call to PInvoke function<BR>&gt; 'Test_ITKFilters!Test_ITKFilters.Program::BinaryThresholdImageFilter' has<BR>&gt; unbalanced the stack. This is likely because the managed PInvoke signature<BR>&gt; does not match the unmanaged target signature. Check that the calling<BR>&gt; convention and parameters of the PInvoke signature match the target<BR>&gt; unmanaged signature.<BR>&gt; ________________<BR>&gt; <BR>&gt; I modified the code to see if the issue was about marshalling the data. I<BR>&gt; created a very simple function within the same file with no arguments and<BR>&gt; the code runs with no errors/warnings. But if I add a single parameter,<BR>&gt; let's say (int x) and print it, it does print the value but it fails and<BR>&gt; sends the same PInvoke error. <BR>&gt; <BR>&gt; Has anyone faced a similar issue? Suggestions are welcome and very much<BR>&gt; appreciated. <BR>&gt; <BR>&gt; Thanks,<BR>&gt; <BR>&gt; Susana <BR>&gt; <BR>&gt; <BR>&gt; --<BR>&gt; View this message in context: http://itk-insight-users.2283740.n2.nabble.com/PInvokeStackImbalance-error-when-calling-from-VS2010-an-ITK-function-defined-in-a-dll-tp6382376p6382376.html<BR>&gt; Sent from the ITK Insight Users mailing list archive at Nabble.com.<BR>&gt; _____________________________________<BR>&gt; Powered by www.kitware.com<BR>&gt; <BR>&gt; Visit other Kitware open-source projects at<BR>&gt; http://www.kitware.com/opensource/opensource.html<BR>&gt; <BR>&gt; Kitware offers ITK Training Courses, for more information visit:<BR>&gt; http://www.kitware.com/products/protraining.html<BR>&gt; <BR>&gt; Please keep messages on-topic and check the ITK FAQ at:<BR>&gt; http://www.itk.org/Wiki/ITK_FAQ<BR>&gt; <BR>&gt; Follow this link to subscribe/unsubscribe:<BR>&gt; http://www.itk.org/mailman/listinfo/insight-users<BR>                                               </body>
</html>