<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[DLL für PPJoy]]></title><description><![CDATA[<p>Hallo, ich versuche momentan mit dem Programm PPJoy einen virtuellen Joystick auf meinem PC zu installieren, dieser soll seine Daten aus einer selbst erstellten DLL Datei bekommen. Dabei braucht PPJoy die beiden Funktionen</p>
<p>MMRESULT joyGetPosEx(UINT uJoyID,LPJOYINFOEX pji);<br />
und<br />
MMRESULT joyGetDevCapsA(UINT_PTR uJoyID,LPJOYCAPS pjc, UINT cbjc);</p>
<p>info dazu: <a href="http://msdn.microsoft.com/en-us/library/ms709354(VS.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms709354(VS.85).aspx</a></p>
<p>Ich hab diese mal in meiner DLL Datei implementiert (wobei ich irgendwelche Werte zum Testen übergebe) und ich kann diese auch in PPJoy einbinden. Mein Problem ist nur, dass sofort nach dem Einbinden eine Fehlermeldung kommt. Daraufhin bringt mir Visual C++ die Option den Debugger zu verwenden, welcher mir eine Zugriffsverletzung beim Lesen Fehlermeldung ausgibt.</p>
<p>Das wichtigste bei den obigen Funktionen ist die Übergabe der Pointer pji und pjc, dort werden Pointer auf structs übergeben in denen ich mit den Funktionen die gewünschen Daten für den Joystick reinschreiben muss.</p>
<p>Ich selbst bin mehr der Java Programmierer und hab nicht so viel Erfahrung in c++ drum wärs ganz gut, wenn mal jemand nen Blick auf meinem Code werfen würde, vieleicht ist ja irgendein offensichtlicher Fehler dabei der mir nicht auffällt.</p>
<pre><code>// MyJoyDLL.cpp : Definiert den Einstiegspunkt für die DLL-Anwendung.
//

#include &quot;stdafx.h&quot;

#ifdef _MANAGED
#pragma managed(push, off)
#endif

typedef struct { 
    WORD wMid; 
    WORD wPid; 
    TCHAR szPname[1]; 
    UINT wXmin; 
    UINT wXmax; 
    UINT wYmin; 
    UINT wYmax; 
    UINT wZmin; 
    UINT wZmax; 
    UINT wNumButtons; 
    UINT wPeriodMin; 
    UINT wPeriodMax; 
    UINT wRmin; 
    UINT wRmax; 
    UINT wUmin; 
    UINT wUmax; 
    UINT wVmin; 
    UINT wVmax; 
    UINT wCaps; 
    UINT wMaxAxes; 
    UINT wNumAxes; 
    UINT wMaxButtons; 
    TCHAR szRegKey[1]; 
    TCHAR szOEMVxD[1]; 
} JOYCAPS; 

typedef struct joyinfoex_tag { 
    DWORD dwSize; 
    DWORD dwFlags; 
    DWORD dwXpos; 
    DWORD dwYpos; 
    DWORD dwZpos; 
    DWORD dwRpos; 
    DWORD dwUpos; 
    DWORD dwVpos; 
    DWORD dwButtons; 
    DWORD dwButtonNumber; 
    DWORD dwPOV; 
    DWORD dwReserved1; 
    DWORD dwReserved2; 
} JOYINFOEX; 

enum MMRESULT {JOYERR_NOERROR =0};

extern &quot;C&quot; __declspec(dllexport)MMRESULT joyGetPosEx(UINT uJoyID,JOYINFOEX *pji);
extern &quot;C&quot; __declspec(dllexport)MMRESULT joyGetDevCapsA(UINT_PTR uJoyID,JOYCAPS *pjc,UINT cbjc); 

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
    return TRUE;
}

 JOYINFOEX joyI;
 JOYCAPS joyC;

// Funktionen implementieren:
MMRESULT joyGetPosEx(UINT uJoyID,JOYINFOEX *pji){

    joyI.dwSize = 13*4;
    joyI.dwFlags = 255; //return all
    joyI.dwXpos = 75;
    joyI.dwYpos = 75;
    joyI.dwZpos = 75;
    joyI.dwRpos = 75;
    joyI.dwUpos = 75;
    joyI.dwVpos = 75;
    joyI.dwButtons = 10; //button 2 und 4 
    joyI.dwButtonNumber = 2;
    joyI.dwPOV = 0; //keine Ahnung

    pji = &amp;joyI;

    MMRESULT mmresult = JOYERR_NOERROR;
    return mmresult;
}

MMRESULT joyGetDevCapsA(UINT_PTR uJoyID,JOYCAPS *pjc,UINT cbjc){

    joyC.wMid = 40; 
    joyC.wPid = 0; 
    joyC.szPname[0] = '\0';
    joyC.wXmin = 0;
    joyC.wXmax = 100;
    joyC.wYmin = 0;
    joyC.wYmax = 100;
    joyC.wZmin = 0;
    joyC.wZmax = 100;
    joyC.wNumButtons = 6;

    joyC.wPeriodMin = 0; 
    joyC.wPeriodMax = 0;

    joyC.wRmin = 0;
    joyC.wRmax = 100;
    joyC.wUmin = 0;
    joyC.wUmax = 100;
    joyC.wVmin = 0;
    joyC.wVmax = 100;
    joyC.wCaps = 15; 
    joyC.wMaxAxes = 6;
    joyC.wNumAxes = 6;
    joyC.wMaxButtons = 6;
    joyC.szRegKey[0] = '\0';
    joyC.szOEMVxD[0] = '\0';

    pjc = &amp;joyC;

    MMRESULT mmresult = JOYERR_NOERROR;
    return mmresult;
}

#ifdef _MANAGED
#pragma managed(pop)
#endif
</code></pre>
<p>Ich bedanke mich schonmal für die Antworten.</p>
<p>mfg</p>
<p>Andi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/220408/dll-für-ppjoy</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 15:28:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/220408.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Aug 2008 16:18:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to DLL für PPJoy on Fri, 15 Aug 2008 16:18:45 GMT]]></title><description><![CDATA[<p>Hallo, ich versuche momentan mit dem Programm PPJoy einen virtuellen Joystick auf meinem PC zu installieren, dieser soll seine Daten aus einer selbst erstellten DLL Datei bekommen. Dabei braucht PPJoy die beiden Funktionen</p>
<p>MMRESULT joyGetPosEx(UINT uJoyID,LPJOYINFOEX pji);<br />
und<br />
MMRESULT joyGetDevCapsA(UINT_PTR uJoyID,LPJOYCAPS pjc, UINT cbjc);</p>
<p>info dazu: <a href="http://msdn.microsoft.com/en-us/library/ms709354(VS.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms709354(VS.85).aspx</a></p>
<p>Ich hab diese mal in meiner DLL Datei implementiert (wobei ich irgendwelche Werte zum Testen übergebe) und ich kann diese auch in PPJoy einbinden. Mein Problem ist nur, dass sofort nach dem Einbinden eine Fehlermeldung kommt. Daraufhin bringt mir Visual C++ die Option den Debugger zu verwenden, welcher mir eine Zugriffsverletzung beim Lesen Fehlermeldung ausgibt.</p>
<p>Das wichtigste bei den obigen Funktionen ist die Übergabe der Pointer pji und pjc, dort werden Pointer auf structs übergeben in denen ich mit den Funktionen die gewünschen Daten für den Joystick reinschreiben muss.</p>
<p>Ich selbst bin mehr der Java Programmierer und hab nicht so viel Erfahrung in c++ drum wärs ganz gut, wenn mal jemand nen Blick auf meinem Code werfen würde, vieleicht ist ja irgendein offensichtlicher Fehler dabei der mir nicht auffällt.</p>
<pre><code>// MyJoyDLL.cpp : Definiert den Einstiegspunkt für die DLL-Anwendung.
//

#include &quot;stdafx.h&quot;

#ifdef _MANAGED
#pragma managed(push, off)
#endif

typedef struct { 
    WORD wMid; 
    WORD wPid; 
    TCHAR szPname[1]; 
    UINT wXmin; 
    UINT wXmax; 
    UINT wYmin; 
    UINT wYmax; 
    UINT wZmin; 
    UINT wZmax; 
    UINT wNumButtons; 
    UINT wPeriodMin; 
    UINT wPeriodMax; 
    UINT wRmin; 
    UINT wRmax; 
    UINT wUmin; 
    UINT wUmax; 
    UINT wVmin; 
    UINT wVmax; 
    UINT wCaps; 
    UINT wMaxAxes; 
    UINT wNumAxes; 
    UINT wMaxButtons; 
    TCHAR szRegKey[1]; 
    TCHAR szOEMVxD[1]; 
} JOYCAPS; 

typedef struct joyinfoex_tag { 
    DWORD dwSize; 
    DWORD dwFlags; 
    DWORD dwXpos; 
    DWORD dwYpos; 
    DWORD dwZpos; 
    DWORD dwRpos; 
    DWORD dwUpos; 
    DWORD dwVpos; 
    DWORD dwButtons; 
    DWORD dwButtonNumber; 
    DWORD dwPOV; 
    DWORD dwReserved1; 
    DWORD dwReserved2; 
} JOYINFOEX; 

enum MMRESULT {JOYERR_NOERROR =0};

extern &quot;C&quot; __declspec(dllexport)MMRESULT joyGetPosEx(UINT uJoyID,JOYINFOEX *pji);
extern &quot;C&quot; __declspec(dllexport)MMRESULT joyGetDevCapsA(UINT_PTR uJoyID,JOYCAPS *pjc,UINT cbjc); 

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
    return TRUE;
}

 JOYINFOEX joyI;
 JOYCAPS joyC;

// Funktionen implementieren:
MMRESULT joyGetPosEx(UINT uJoyID,JOYINFOEX *pji){

    joyI.dwSize = 13*4;
    joyI.dwFlags = 255; //return all
    joyI.dwXpos = 75;
    joyI.dwYpos = 75;
    joyI.dwZpos = 75;
    joyI.dwRpos = 75;
    joyI.dwUpos = 75;
    joyI.dwVpos = 75;
    joyI.dwButtons = 10; //button 2 und 4 
    joyI.dwButtonNumber = 2;
    joyI.dwPOV = 0; //keine Ahnung

    pji = &amp;joyI;

    MMRESULT mmresult = JOYERR_NOERROR;
    return mmresult;
}

MMRESULT joyGetDevCapsA(UINT_PTR uJoyID,JOYCAPS *pjc,UINT cbjc){

    joyC.wMid = 40; 
    joyC.wPid = 0; 
    joyC.szPname[0] = '\0';
    joyC.wXmin = 0;
    joyC.wXmax = 100;
    joyC.wYmin = 0;
    joyC.wYmax = 100;
    joyC.wZmin = 0;
    joyC.wZmax = 100;
    joyC.wNumButtons = 6;

    joyC.wPeriodMin = 0; 
    joyC.wPeriodMax = 0;

    joyC.wRmin = 0;
    joyC.wRmax = 100;
    joyC.wUmin = 0;
    joyC.wUmax = 100;
    joyC.wVmin = 0;
    joyC.wVmax = 100;
    joyC.wCaps = 15; 
    joyC.wMaxAxes = 6;
    joyC.wNumAxes = 6;
    joyC.wMaxButtons = 6;
    joyC.szRegKey[0] = '\0';
    joyC.szOEMVxD[0] = '\0';

    pjc = &amp;joyC;

    MMRESULT mmresult = JOYERR_NOERROR;
    return mmresult;
}

#ifdef _MANAGED
#pragma managed(pop)
#endif
</code></pre>
<p>Ich bedanke mich schonmal für die Antworten.</p>
<p>mfg</p>
<p>Andi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1565629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1565629</guid><dc:creator><![CDATA[Andi1804]]></dc:creator><pubDate>Fri, 15 Aug 2008 16:18:45 GMT</pubDate></item><item><title><![CDATA[Reply to DLL für PPJoy on Fri, 15 Aug 2008 17:37:12 GMT]]></title><description><![CDATA[<p>Probier mal die Funktionen als __stdcall zu exportieren, also</p>
<pre><code class="language-cpp">extern &quot;C&quot; __declspec(dllexport) __stdcall bla
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1565664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1565664</guid><dc:creator><![CDATA[doc.dope]]></dc:creator><pubDate>Fri, 15 Aug 2008 17:37:12 GMT</pubDate></item><item><title><![CDATA[Reply to DLL für PPJoy on Fri, 15 Aug 2008 20:23:35 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Antwort,<br />
also __stdcall konnte ich nur so verwenden: (anders hatte der compiler probleme)</p>
<p>extern &quot;C&quot; __declspec(dllexport) MMRESULT __stdcall joyGetPosEx(UINT uJoyID,JOYINFOEX *pji);</p>
<p>extern &quot;C&quot; __declspec(dllexport) MMRESULT __stdcall joyGetDevCapsA(UINT_PTR uJoyID,JOYCAPS *pjc,UINT cbjc);</p>
<p>Bei den Funktionsdeklarationen musste ich die gleiche Änderung vornehmen.<br />
Jetzt mekert aber wieder PPJoy und bringt den Fehler:<br />
Error 127 getting joyGetPosEx() entry<br />
Er erkennt halt die Funktion nicht mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1565731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1565731</guid><dc:creator><![CDATA[Andi1804]]></dc:creator><pubDate>Fri, 15 Aug 2008 20:23:35 GMT</pubDate></item></channel></rss>