<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>C++/CLI wrapper</title>
		<link>http://www.allegro.cc/forums/view/616441</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 24 Aug 2016 22:27:51 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi all,</p><p>I&#39;m trying to create a CLI wrapper for allegro 5.2 using the latest nuget package so I can use allegro in c#. When I try to run my test console app, my app crashes on al_init(). When I say crash I mean the application just dies immediately with no exception or anything.  Any Ideas?</p><p>.h
</p><div class="source-code snippet"><div class="inner"><pre>
<span class="k1">namespace</span> AllegroSharp
<span class="k2">{</span>
  <span class="k1">public</span> ref <span class="k1">class</span> Allegro
  <span class="k2">{</span>
    public:

    <span class="k1">bool</span> UseImageAddon<span class="k2">;</span>

    <span class="k1">bool</span> Initialize<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
  <span class="k2">}</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>


.cpp</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#include "Allegro.h"</span>
<span class="p">#include "allegro5\allegro.h"</span>
<span class="p">#include "allegro5\allegro_image.h"</span>

<span class="k1">bool</span> AllegroSharp::Allegro::Initialize<span class="k2">(</span><span class="k2">)</span>
<span class="k2">{</span>
  <span class="k1">bool</span> allegroOk <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// crashes here</span>
  <span class="k1">bool</span> imageAddonOk <span class="k3">=</span> UseImageAddon ? <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span> <span class="k1">true</span><span class="k2">;</span>

  <span class="k1">return</span> allegroOk <span class="k3">&amp;</span><span class="k3">&amp;</span> imageAddonOk<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

C#</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">namespace</span> AllegroSharpTest
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>    <span class="k1">class</span> Program
<span class="number">  4</span>    <span class="k2">{</span>
<span class="number">  5</span>        <span class="k1">static</span> <span class="k1">void</span> Main<span class="k2">(</span>string<span class="k2">[</span><span class="k2">]</span> args<span class="k2">)</span>
<span class="number">  6</span>        <span class="k2">{</span>
<span class="number">  7</span>            Allegro allegro <span class="k3">=</span> <span class="k1">new</span> Allegro<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>            Display display <span class="k3">=</span> <span class="k1">new</span> Display<span class="k2">(</span><span class="n">1200</span>, <span class="n">800</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>            var statusOk <span class="k3">=</span> allegro.Initialize<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//crashes here</span>
<span class="number"> 11</span>            var displayOk <span class="k3">=</span> display.Initialize<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>            Console.WriteLine<span class="k2">(</span>$<span class="s">"Allegro ok: {statusOk} Display ok: {displayOk}"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>            Console.ReadKey<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>        <span class="k2">}</span>
<span class="number"> 18</span>    <span class="k2">}</span>
<span class="number"> 19</span><span class="k2">}</span>
</div></div><p>

EDIT: I&#39;m starting to the think it has something to do with the entry point. I put the no entry point flag for my dll so i could link it. I figured allegro would provide the entry point when the user of the dll calls allegro init. I&#39;m trying to compile it with a dllmain function in my dll but the linker can&#39;t seem to find it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (shadyvillian)</author>
		<pubDate>Wed, 17 Aug 2016 05:38:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You generally never want to call <span class="source-code"><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a></span> from a library (see its documentation), so at the very least you should try calling <span class="source-code"><a href="http://www.allegro.cc/manual/al_install_system"><span class="a">al_install_system</span></a></span> instead.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sat, 20 Aug 2016 20:22:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I was trying that but it seemed to crash as well.  I think I supplied nullptr for the second parameter.  Is that correct or should I use something else? </p><p>EDIT: It worked, thanks.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (shadyvillian)</author>
		<pubDate>Mon, 22 Aug 2016 16:05:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://liballeg.org/a5docs/trunk/system.html#al_init">Proper Allegro Docs</a> said:</div><div class="quote"><p>
Note: It is typically wrong to call al_init anywhere except the final game binary. In particular, do not call it inside a shared library unless you know what you&#39;re doing. In those cases, it is better to call al_install_system either with a NULL atexit_ptr, or with a pointer to atexit provided by the user of this shared library.</p></div></div><p>New news to me! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Wed, 24 Aug 2016 22:27:51 +0000</pubDate>
	</item>
</rss>
