<HTML><HEAD></HEAD>
<BODY dir=ltr>
<DIV dir=ltr>
<DIV style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial'; COLOR: #000000">
<DIV>I am calling the function in the DLL using interop, the function is 
declared in the c++ program as extern C. After all it’s just a void function 
with no parametres so it’s perfectly possible for it to have an extern C 
interface, and be non-mangled.</DIV>
<DIV> </DIV>
<DIV>The exception that is not caught when running, is both thrown and caugt (in 
code) inside the c code in that function.. In fact the problem is with throw. A 
cerr<< statement the very next line after a throw is executed, which makes 
very little sense. mono is breaking some rules when setting stuff up before 
invoking a dll call (at least this is my best guess)</DIV>
<DIV> </DIV>
<DIV>I fear that any assembly that calls a native VS2012 c++ DLL (possbly other 
compilers too) that internally depends on being able to throw and catch 
exceptions – will not work correctly on mono 3.2.3 on windows, even though it 
worked before 3.2.3</DIV>
<DIV> </DIV>
<DIV>I cannot rule out that I am using some wrong compiler settings – if I do , 
the same wrong compiler settings are in the small project filed with the bug, as 
that project also shows the error.</DIV>
<DIV> </DIV>
<DIV>I have filed a bug with two visual studio projects to build a C# 
program,and a c++ DLL (visual studio). I have deliberately tried to use as many 
default settings as possible, as that probably matches well with what is out 
there in the open. The C dll could be made somewhat simpler.</DIV>
<DIV> </DIV>
<DIV>the bug report is here :</DIV>
<DIV> </DIV>
<DIV><A href="https://bugzilla.xamarin.com/show_bug.cgi?id=14989"><FONT 
face="Times New Roman"><FONT 
style="FONT-SIZE: 12pt">https://bugzilla.xamarin.com/show_bug.cgi?id=14989</FONT></FONT></A></DIV>
<DIV> </DIV>
<DIV>It would be very interesting to have someone confirm that I am correct in 
my assumption that mono 3.2.3 does not work as it is supposed to do, when 
calling DLL’s on windows.</DIV>
<DIV> </DIV>
<DIV>I am aware that exceptions thrown in a dll cannot be caught in the calling 
C# program, even though this works fine in .net. My c++ program does not leak 
exceptions to managed code. The example programs in the bug report doesn’t do 
that either)</DIV>
<DIV> </DIV>
<DIV>regards,</DIV>
<DIV> </DIV>
<DIV>Dennis</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV 
style="FONT-SIZE: small; FONT-FAMILY: 'Calibri'; FONT-WEIGHT: normal; COLOR: #000000; FONT-STYLE: normal; TEXT-DECORATION: none; DISPLAY: inline">
<DIV style="FONT: 10pt tahoma">
<DIV> </DIV>
<DIV style="BACKGROUND: #f5f5f5">
<DIV style="font-color: black"><B>From:</B> <A title=inorton@gmail.com 
href="mailto:inorton@gmail.com">Ian Norton</A> </DIV>
<DIV><B>Sent:</B> Friday, September 27, 2013 8:59 PM</DIV>
<DIV><B>To:</B> <A title=dennis@fantoni.dk 
href="mailto:dennis@fantoni.dk">Dennis Fantoni</A> </DIV>
<DIV><B>Cc:</B> <A title=mono-devel-list@lists.ximian.com 
href="mailto:mono-devel-list@lists.ximian.com">Mono Developer List</A> </DIV>
<DIV><B>Subject:</B> Re: [Mono-dev] P/Invoking a VS2012 C++ DLL, DLL behavior is 
materially different in 3.2.3 than in 3.1 and .net</DIV></DIV></DIV>
<DIV> </DIV></DIV>
<DIV 
style="FONT-SIZE: small; FONT-FAMILY: 'Calibri'; FONT-WEIGHT: normal; COLOR: #000000; FONT-STYLE: normal; TEXT-DECORATION: none; DISPLAY: inline">
<P dir=ltr>Er.. How are you calling this? Surely the function name gets 
mangled?</P>
<DIV class=gmail_quote>On 27 Sep 2013 09:01, "Dennis Fantoni" <<A 
href="mailto:dennis@fantoni.dk">dennis@fantoni.dk</A>> wrote:<BR 
type="attribution">
<BLOCKQUOTE class=gmail_quote 
style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
  <DIV dir=ltr>
  <DIV dir=ltr>
  <DIV style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial'">
  <DIV>(running on windows 7)</DIV>
  <DIV> </DIV>
  <DIV>In short, if I wrote this in a dll in .net or mono 3.1  i would get 
  to “this shows”</DIV>
  <DIV> </DIV>
  <DIV>void tester() {</DIV>
  <DIV>try {</DIV>
  <DIV>throw(foo);</DIV>
  <DIV>cerr<<”this never shows”</DIV>
  <DIV>}</DIV>
  <DIV>ctch(...){</DIV>
  <DIV>cerr<<”this shows”</DIV>
  <DIV>}</DIV>
  <DIV>}</DIV>
  <DIV> </DIV>
  <DIV>However, in 3.2.3 above code when called via Pinvoke, will display “this 
  never shows” , indicating that the data structures used by the exception 
  system inside the DLL has been damaged by mono.</DIV>
  <DIV> </DIV>
  <DIV>I have created two VS2012 sample solutions to create a C# dll caller, and 
  a C++ callee that exposes the problem – and filed a bug</DIV>
  <DIV> </DIV>
  <DIV><A href="https://bugzilla.xamarin.com/show_bug.cgi?id=14989" 
  target=_blank><FONT face="Times New Roman"><FONT 
  style="FONT-SIZE: 12pt">https://bugzilla.xamarin.com/show_bug.cgi?id=14989</FONT></FONT></A></DIV>
  <DIV> </DIV>
  <DIV>If someone have the time to confirm or comment, I would be very pleased. 
  If I am not mistaken it is a pretty severe bug – it might happen that any 
  vs2012 c++ DLL that uses exceptions internally has ceased to work with mono on 
  windows. (the problem might be bigger, I havent tried to build dll’s with 
  VS2010 or other languages).</DIV>
  <DIV> </DIV>
  <DIV>Anyways, I would expect mono to behave similar to .net, but it does not 
  in this respect.</DIV>
  <DIV> </DIV>
  <DIV>Regards,</DIV>
  <DIV> </DIV>
  <DIV> </DIV>
  <DIV>Dennis</DIV>
  <DIV> </DIV>
  <DIV> </DIV></DIV></DIV></DIV><BR>_______________________________________________<BR>Mono-devel-list 
  mailing list<BR><A 
  href="mailto:Mono-devel-list@lists.ximian.com">Mono-devel-list@lists.ximian.com</A><BR><A 
  href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" 
  target=_blank>http://lists.ximian.com/mailman/listinfo/mono-devel-list</A><BR><BR></BLOCKQUOTE></DIV></DIV></DIV></DIV></BODY></HTML>