<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to ConvertingDLLs</title><link>https://sourceforge.net/p/makeitso/wiki/ConvertingDLLs/</link><description>Recent changes to ConvertingDLLs</description><atom:link href="https://sourceforge.net/p/makeitso/wiki/ConvertingDLLs/feed" rel="self"/><language>en</language><lastBuildDate>Tue, 26 Nov 2013 10:16:50 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/makeitso/wiki/ConvertingDLLs/feed" rel="self" type="application/rss+xml"/><item><title>ConvertingDLLs modified by Anonymous</title><link>https://sourceforge.net/p/makeitso/wiki/ConvertingDLLs/</link><description>&lt;div class="markdown_content"&gt;&lt;h3 id="overview"&gt;Overview&lt;/h3&gt;
&lt;p&gt;The code for shared-objects libraries in gcc is simpler than the code for Windows DLLs. For example, Windows has a DllMain() function and DLL_EXPORT declaration on functions. The code needed for a Windows DLL will not directly compile under gcc. So you have to do some conditional compilation to remove some of the extra stuff that Windows needs but gcc does not. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DLL_EXPORT&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You need to undefine DLL_EXPORT for gcc builds. Include these lines before DLL_EXPORT is used. For example in header files that declare exported functions: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c"&gt;#ifdef WIN32&lt;/span&gt;
    &lt;span class="c"&gt;#undef DLL_EXPORT&lt;/span&gt;
    &lt;span class="c"&gt;#define DLL_EXPORT __declspec(dllexport)&lt;/span&gt;
&lt;span class="c"&gt;#else&lt;/span&gt;
    &lt;span class="c"&gt;#undef DLL_EXPORT&lt;/span&gt;
    &lt;span class="c"&gt;#define DLL_EXPORT &lt;/span&gt;
&lt;span class="c"&gt;#endif&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;stdafx.h&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You do not need many (if any) of the things in stdafx.h, so you can conditionally only compile them under Windows. For example: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="cp"&gt;#ifdef WIN32&lt;/span&gt;

    &lt;span class="c1"&gt;// stdafx.h : include file for standard system include files,&lt;/span&gt;
    &lt;span class="c1"&gt;// or project specific include files that are used frequently, but&lt;/span&gt;
    &lt;span class="c1"&gt;// are changed infrequently&lt;/span&gt;
    &lt;span class="c1"&gt;//&lt;/span&gt;
    &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;targetver.h&amp;quot;&lt;/span&gt;

    &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="n"&gt;WIN32_LEAN_AND_MEAN&lt;/span&gt;             &lt;span class="c1"&gt;// Exclude rarely-used stuff from Windows headers&lt;/span&gt;
    &lt;span class="c1"&gt;// Windows Header Files:&lt;/span&gt;
    &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;windows&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="cp"&gt;#endif&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;dllmain.cpp&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You do not need the DllMain() function in gcc, so you can conditionally compile it only under Windows. For example: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="cp"&gt;#ifdef WIN32&lt;/span&gt;

&lt;span class="n"&gt;BOOL&lt;/span&gt; &lt;span class="n"&gt;APIENTRY&lt;/span&gt; &lt;span class="nf"&gt;DllMain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;HMODULE&lt;/span&gt; &lt;span class="n"&gt;hModule&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;DWORD&lt;/span&gt; &lt;span class="n"&gt;ul_reason_for_call&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LPVOID&lt;/span&gt; &lt;span class="n"&gt;lpReserved&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ul_reason_for_call&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;DLL_PROCESS_ATTACH&lt;/span&gt;:
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;DLL_THREAD_ATTACH&lt;/span&gt;:
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;DLL_THREAD_DETACH&lt;/span&gt;:
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;DLL_PROCESS_DETACH&lt;/span&gt;:
        &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="cp"&gt;#endif&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Anonymous</dc:creator><pubDate>Tue, 26 Nov 2013 10:16:50 -0000</pubDate><guid>https://sourceforge.netcd394572d0ce25fc8a0fe0eb9c60b52bcbb5ef8d</guid></item></channel></rss>