<?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[GameSpy DLL einbinden]]></title><description><![CDATA[<p>Ich möchte in mein Programm die gsmalg.dll (GameSpy DLL) einbinden.</p>
<p>Wenn man sich über IdTCP anmeldet bekommt man einen code vom GameSpy Server und muss diesen mit der dll bearbeiten mit der Funktion GameSpyAuth. Dann wird der sich daraus ergebende Key zurückgesandt und man erhält die ServerListe für das Spiel seinder wahl.</p>
<p>Die DLL liegt im Programmordner.</p>
<p>main.cpp:</p>
<pre><code class="language-cpp">void __fastcall TForm1::Button3Click(TObject *Sender)
{

HINSTANCE hdll=LoadLibrary(&quot;gsmsalg.dll&quot;);
GameSpyAuth=(AnsiString(__stdcall*)(AnsiString, AnsiString, int))GetProcAddress(hdll,&quot;_GameSpyAuth&quot;);

// Create a client token from the the server token, UT key, and appropriate 'enctype'
ShowMessage(GameSpyAuth(Edit2-&gt;Text, Key, 0));       // use DLL
</code></pre>
<p>main.h:</p>
<pre><code class="language-cpp">private:	// User declarations
          AnsiString (__stdcall* GameSpyAuth)(AnsiString, AnsiString, int);
</code></pre>
<p>Wenn ich auf den Button klicke, dann kommt folgende Fehlermeldung:</p>
<blockquote>
<p>Projekt nggser.exe raised exception class EAccessVoilation 'Access violation at address 000000000. Read of address 000000000'. Process stopped. Use Step or Run to continue.</p>
</blockquote>
<p>Müsste doch eigentlich nur mit der dll gehen.<br />
Benötigt man nicht noch eine .lib der DLL?</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Was habe ich beim einbinden der DLL falsch gemacht?</p>
<p>Oder muss ich vielleicht void anstatt ansistring nehmen?<br />
Damm sagt er aber dass er nicht void nach ansitring convertieren kann...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/127967/gamespy-dll-einbinden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Jul 2026 06:52:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/127967.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 Nov 2005 10:18:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to GameSpy DLL einbinden on Tue, 29 Nov 2005 10:18:16 GMT]]></title><description><![CDATA[<p>Ich möchte in mein Programm die gsmalg.dll (GameSpy DLL) einbinden.</p>
<p>Wenn man sich über IdTCP anmeldet bekommt man einen code vom GameSpy Server und muss diesen mit der dll bearbeiten mit der Funktion GameSpyAuth. Dann wird der sich daraus ergebende Key zurückgesandt und man erhält die ServerListe für das Spiel seinder wahl.</p>
<p>Die DLL liegt im Programmordner.</p>
<p>main.cpp:</p>
<pre><code class="language-cpp">void __fastcall TForm1::Button3Click(TObject *Sender)
{

HINSTANCE hdll=LoadLibrary(&quot;gsmsalg.dll&quot;);
GameSpyAuth=(AnsiString(__stdcall*)(AnsiString, AnsiString, int))GetProcAddress(hdll,&quot;_GameSpyAuth&quot;);

// Create a client token from the the server token, UT key, and appropriate 'enctype'
ShowMessage(GameSpyAuth(Edit2-&gt;Text, Key, 0));       // use DLL
</code></pre>
<p>main.h:</p>
<pre><code class="language-cpp">private:	// User declarations
          AnsiString (__stdcall* GameSpyAuth)(AnsiString, AnsiString, int);
</code></pre>
<p>Wenn ich auf den Button klicke, dann kommt folgende Fehlermeldung:</p>
<blockquote>
<p>Projekt nggser.exe raised exception class EAccessVoilation 'Access violation at address 000000000. Read of address 000000000'. Process stopped. Use Step or Run to continue.</p>
</blockquote>
<p>Müsste doch eigentlich nur mit der dll gehen.<br />
Benötigt man nicht noch eine .lib der DLL?</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Was habe ich beim einbinden der DLL falsch gemacht?</p>
<p>Oder muss ich vielleicht void anstatt ansistring nehmen?<br />
Damm sagt er aber dass er nicht void nach ansitring convertieren kann...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929506</guid><dc:creator><![CDATA[marcusdj]]></dc:creator><pubDate>Tue, 29 Nov 2005 10:18:16 GMT</pubDate></item><item><title><![CDATA[Reply to GameSpy DLL einbinden on Tue, 29 Nov 2005 10:24:02 GMT]]></title><description><![CDATA[<p>Hallo</p>
<pre><code class="language-cpp">GameSpyAuth=(AnsiString(__stdcall*)(AnsiString, AnsiString, int))GetProcAddress(hdll,&quot;_GameSpyAuth&quot;);
</code></pre>
<p>Ist schon mal sehr verdächtig. Ich bezweifle stark, das die DLL Funktionen mit AnsiString-Typen als Parameter anbietet, meistens sind es reine C-Strings (char *). Informiere dich also erstmal, was deine gewünschte Funktion als Signatur anbietet, und benutzt diese Signatur als Funktionspointer-Typ, nicht einen selbst ausgedachten.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929512</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 29 Nov 2005 10:24:02 GMT</pubDate></item><item><title><![CDATA[Reply to GameSpy DLL einbinden on Tue, 29 Nov 2005 10:28:30 GMT]]></title><description><![CDATA[<p>Hi,<br />
du must keine lib einbinden, wenn du die Dll (so wie in deinem Quelltext) dynamisch einbindest.</p>
<p>Aber du solltest das zurückgegeben Handle auf deien Dll prüfen, ob überhaupt geladen wurde.<br />
Dasselbe gilt natürlich auch für deinen Funktionszeiger, den du von GetProcAddress zurückbekommst.<br />
Und woher weisst du, ob der Funktionsname in der DLL mit einem Unterstrich anfängt?</p>
<p>Davor gilt natürlich auch noch akari's einwurf, wenn du nicht weisst, was in der DLL drin ist, wird dein Funktionszeiger immer falsch liegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929517</guid><dc:creator><![CDATA[SilentSurfer]]></dc:creator><pubDate>Tue, 29 Nov 2005 10:28:30 GMT</pubDate></item><item><title><![CDATA[Reply to GameSpy DLL einbinden on Tue, 29 Nov 2005 10:38:02 GMT]]></title><description><![CDATA[<p>Also ich habe ein Beispiel Projekt (Delphi) gezogen</p>
<p><a href="http://www.geocities.com/kqforum/UTServerQuery2.zip" rel="nofollow">http://www.geocities.com/kqforum/UTServerQuery2.zip</a></p>
<p>und versuche es nun auf BCB umzuschreiben bisher hat es funktioniert.</p>
<p>Hier aus der Unit1.pas des Beispiels de betreffende Stelle:</p>
<pre><code class="language-cpp">function TForm1.GameSpyAuth(Secure, Key: String; AuthType: Integer): String;
var
  lHandle: THandle;
  func: TSkynetAuthDll;
begin
  lHandle := LoadLibrary(pchar(FCurrentDir + '\' + FAuthDLL));
  try
    if lHandle &lt;&gt; 0 then begin
      @func := GetProcAddress(lHandle, 'gsseckey'); //seckey
      if @func &lt;&gt; nil then begin
        SetLength(Result, Round(Length(Secure) * (4 / 3)));
        func(PChar(Result), PChar(Secure), PChar(Key), AuthType);
      end else
        raise EExternalLibraryMethodNotFound.Create('Error locating function in DLL library: ' + FCurrentDir + '\' + FAuthDLL);
    end else
      raise EFileNotFoundError.Create('Missing DLL library file: ' + FCurrentDir + '\' + FAuthDLL);
  finally
    FreeLibrary(lHandle);
  end;
end;
</code></pre>
<p>Habe jetzt mei Programm umgeschrieben:</p>
<p>main.cpp:</p>
<pre><code class="language-cpp">HINSTANCE hdll=LoadLibrary(&quot;gsmsalg.dll&quot;);
GameSpyAuth=(String(__stdcall*)(String, String, Integer))GetProcAddress(hdll,&quot;_GameSpyAuth&quot;);
</code></pre>
<p>main.h:</p>
<pre><code class="language-cpp">String (__stdcall* GameSpyAuth)(String, String, Integer);
</code></pre>
<p>Geht aber immer noch nicht, der selbe Fehler tritt auf. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/929528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929528</guid><dc:creator><![CDATA[marcusdj]]></dc:creator><pubDate>Tue, 29 Nov 2005 10:38:02 GMT</pubDate></item><item><title><![CDATA[Reply to GameSpy DLL einbinden on Tue, 29 Nov 2005 10:42:31 GMT]]></title><description><![CDATA[<p>Also das _ habe ich jetzt entfernt. Geht aber immer noch nicht obwohl alles wie im Beispiel ist.</p>
<p>Wie mache ich das mit dem überprüfen ob die dll geladen ist ich hasse den code kann das nicht übersetzen:</p>
<pre><code class="language-cpp">if lHandle &lt;&gt; 0 then begin
      @func := GetProcAddress(lHandle, 'gsseckey'); //seckey
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/929531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929531</guid><dc:creator><![CDATA[marcusdj]]></dc:creator><pubDate>Tue, 29 Nov 2005 10:42:31 GMT</pubDate></item><item><title><![CDATA[Reply to GameSpy DLL einbinden on Tue, 29 Nov 2005 11:07:00 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>ist einfach eine Überprüfung</p>
<pre><code class="language-cpp">if (lHandle)
{
  // Hier Code ausführen, wenn lHandle gültig (!= NULL) ist
  }
else
{
  // Hier Code ausführen, wenn lHandle nicht gültig (== NULL) ist
  }
</code></pre>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929548</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 29 Nov 2005 11:07:00 GMT</pubDate></item><item><title><![CDATA[Reply to GameSpy DLL einbinden on Tue, 29 Nov 2005 11:06:31 GMT]]></title><description><![CDATA[<p>Ist bestimmt gut gemeint, aber dein String ist unter BCB auch nichts anderes als eine typedef auf einen AnsiString (siehe sysmac.h). Das hilft dir so gar nichts.<br />
Dll's arbeiten normalerweise mit char* auf einen String.</p>
<p>Das mit dem überprüfen ist einfach, das meiste steht ja schon in Pascal vor dir:</p>
<pre><code class="language-cpp">if(hdll == NULL){
 //- tu was, die Dll wurde nicht geladen
}else{
 //- tu was anderes, die Dll wurde geladen
}
</code></pre>
<p>Die Rückgabewerte dieser Funktionen ( auch GetProcAddress )kriegst du über die Borlandhilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929549</guid><dc:creator><![CDATA[SilentSurfer]]></dc:creator><pubDate>Tue, 29 Nov 2005 11:06:31 GMT</pubDate></item><item><title><![CDATA[Reply to GameSpy DLL einbinden on Tue, 29 Nov 2005 11:07:58 GMT]]></title><description><![CDATA[<p>ups,<br />
sorry akari für das doppelposting, da warst du schneller</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929551</guid><dc:creator><![CDATA[SilentSurfer]]></dc:creator><pubDate>Tue, 29 Nov 2005 11:07:58 GMT</pubDate></item><item><title><![CDATA[Reply to GameSpy DLL einbinden on Tue, 29 Nov 2005 11:54:40 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">HINSTANCE hdll=LoadLibrary(&quot;gsmsalg.dll&quot;);
if(hdll == NULL){
 ShowMessage(&quot;gsmsalg.dll konnte nicht geladen werden!&quot;);
}else{
 ShowMessage(&quot;DLL erfolgreich geladen!&quot;);
}
</code></pre>
<p>Also dll wurde erfolgreich geladen!</p>
<p>Fehler also beim aufruf.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">Secure := ExtractServerToken(TempString);
          //secure =     function  GetGameKey(GameAbbr: String): String; also secure ist ein string!

          Key := GetGameKey(GameName);
          Key := uGameSpyKey.getHandoff(Key);
          // ist auch ein string

          // Create a client token from the the server token, UT key, and appropriate 'enctype'
          case RadioGroup1.ItemIndex of
            0: AuthReply := GameSpyAuth(Secure, Key, 0);       // benutze DLL !!!!!
            1: AuthReply := uGameSpyKey.gsseckey(Secure, Key); // benutze Delphi unit
          end;
          Memo2.Lines.Add('Generated client token = ' + AuthReply);
        except
          raise;
        end;

        // SEND AUTH
        // hier sendet er den code dann über idtcp das kann ich....
</code></pre>
<p>man hat ja die wahl zwischen der dll und dem</p>
<p>delphi code:</p>
<p>[/cpp]unit uGameSpyKey;</p>
<p>interface<br />
function addchar(var Validate: string; number: byte): string;<br />
function getHandoff(const Handoff: string): string;<br />
function gsseckey(SecureKey, HandOff: String): String;</p>
<p>implementation</p>
<p>function getHandoff(const Handoff: string): string;<br />
var<br />
i : byte ; // Loop-var<br />
// Handoff is too short:<br />
begin<br />
Result := '';<br />
if Length(Handoff) &lt; 13 Then<br />
Result := Handoff<br />
else begin<br />
i := 3;<br />
while i &lt;= 13 do begin<br />
// Add next char to our new Handoff<br />
Result := Result + Copy(Handoff, i, 1);<br />
Inc(i, 2);<br />
end;<br />
end;<br />
end; { function }</p>
<p>function addchar(var Validate: string; number: byte): string;<br />
var<br />
newchar: String;<br />
begin<br />
if (Number &lt; 26) then<br />
newchar := Chr(Number + 65)<br />
else if (Number &lt; 52) then<br />
newchar := Chr(Number + 71)<br />
else if (Number &lt; 62) then<br />
newchar := Chr(Number - 4)<br />
else if (Number = 62) then<br />
newchar := '+'<br />
else if (Number = 63) then<br />
newchar := '/';<br />
Validate := validate + newchar;<br />
end;</p>
<p>function gsseckey(SecureKey, HandOff: String): String;<br />
var<br />
Table: Array[0..255] Of Byte;<br />
Key: Array of Byte;<br />
Len: Array[0..1] Of Byte;<br />
Temp: Array[0..3] Of Byte;<br />
I, X: Integer;<br />
Validate: String;<br />
begin<br />
FillChar(Temp,4,0);</p>
<p>for I := 0 to 255 do<br />
Table[I] := I;</p>
<p>Len[0] := Length(Handoff);<br />
Len[1] := Length(SecureKey);</p>
<p>for i := 0 to 255 do begin</p>
<p>Temp[0] := (Temp[0] + Table[i] + Ord(Handoff[i mod Len[0] + 1])) AND 255;<br />
Temp[1] := Table[Temp[0&rsqb;&rsqb;;<br />
Table[Temp[0&rsqb;&rsqb; := Table[i];<br />
Table[i] := Temp[1];</p>
<p>end;</p>
<p>Temp[0] := 0;<br />
SetLength(Key,Len[1]);<br />
Len[1] := Len[1] Div 3;</p>
<p>for I := 0 to High(Key) do begin<br />
Key[i] := Ord(SecureKey[i+1]);<br />
Temp[0] := (Temp[0] + Key[i] + 1) AND 255;<br />
Temp[1] := Table[Temp[0&rsqb;&rsqb;;<br />
Temp[2] := (Temp[2] + Temp[1]) AND 255;<br />
Temp[3] := Table[Temp[2&rsqb;&rsqb;;</p>
<p>Table[Temp[2&rsqb;&rsqb; := Temp[1];<br />
Table[Temp[0&rsqb;&rsqb; := Temp[3];</p>
<p>Key[i] := Key[i] XOR Table[(Temp[1] + Temp[3]) AND 255];<br />
end;</p>
<p>i := 0;</p>
<p>while Len[1] &gt;= 1 do begin<br />
Len[1] := Len[1] - 1;</p>
<p>Temp[1] := Key[i];<br />
Temp[3] := Key[i + 1];<br />
addchar(Validate,(Temp[1] shr 2));<br />
addchar(validate,((Temp[1] AND 3) shl 4 OR Temp[3] shr 4));</p>
<p>Temp[1] := Key[i + 2];</p>
<p>addchar(validate,((Temp[3] AND 15) shl 2 OR Temp[1] shr 6));<br />
addchar(validate,Temp[1] AND 63);</p>
<p>i := i + 3;<br />
end;</p>
<p>Result := validate;<br />
end;<br />
end.[cpp]</p>
<p>Aber wie soll man das nur übersetzen?</p>
<p>gibt es keinen Delphi -&gt; BCB übersetzer?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929579</guid><dc:creator><![CDATA[marcusdj]]></dc:creator><pubDate>Tue, 29 Nov 2005 11:54:40 GMT</pubDate></item><item><title><![CDATA[Reply to GameSpy DLL einbinden on Tue, 29 Nov 2005 12:52:02 GMT]]></title><description><![CDATA[<p>Jetzt machst du es dir doch zu einfach.<br />
Hier sind bestimmt viele Leute, die dir beim einbinden deiner dll aufs Pferd helfen, reiten musst du aber schon alleine.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929643</guid><dc:creator><![CDATA[SilentSurfer]]></dc:creator><pubDate>Tue, 29 Nov 2005 12:52:02 GMT</pubDate></item><item><title><![CDATA[Reply to GameSpy DLL einbinden on Tue, 29 Nov 2005 13:12:27 GMT]]></title><description><![CDATA[<p>Hm schon wahr.</p>
<p>Also ich habe jetzt hier entnommen:</p>
<pre><code class="language-cpp">function TForm1.GameSpyAuth(Secure, Key: String; AuthType: Integer): String;
var
  lHandle: THandle;
  func: TSkynetAuthDll;
begin
  lHandle := LoadLibrary(pchar(FCurrentDir + '\' + FAuthDLL));
  try
    if lHandle &lt;&gt; 0 then begin
      @func := GetProcAddress(lHandle, 'gsseckey'); //seckey
      if @func &lt;&gt; nil then begin
        SetLength(Result, Round(Length(Secure) * (4 / 3)));
        func(PChar(Result), PChar(Secure), PChar(Key), AuthType);
      end else
        raise EExternalLibraryMethodNotFound.Create('Error locating function in DLL library: ' + FCurrentDir + '\' + FAuthDLL);
    end else
      raise EFileNotFoundError.Create('Missing DLL library file: ' + FCurrentDir + '\' + FAuthDLL);
  finally
    FreeLibrary(lHandle);
  end;
end;
</code></pre>
<p>genauer dort:<br />
[/cpp]@func := GetProcAddress(lHandle, 'gsseckey'); //seckey[cpp]</p>
<p>,dass GameSpyAuth nicht die Funktion der DLL sondern des Delphi Beispiels ist.</p>
<p>gsseckey heisst die Funktion in der DLL.</p>
<p>habe das jetzt angepasst und bekomme immerhin schon eine andere Fehlermeldung:</p>
<blockquote>
<p>Projekt nggserver.exe raised exception class EAccessVoilation with message 'Access violation at address 40006B10 in module 'rtl60.bpl'. Read of address 73686363'. Process stopped. Use Step or Run to continue.</p>
</blockquote>
<p>das kommt, wenn ich gsseckey als funktion nehme. Wenn ich etwas anderen als funktion schreibe kommt ein anderer fehler und als speicheraddresse 0000000...</p>
<p>das bedeutet ich habe die richtige funktion, diese aber falsch angewand.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929674</guid><dc:creator><![CDATA[marcusdj]]></dc:creator><pubDate>Tue, 29 Nov 2005 13:12:27 GMT</pubDate></item><item><title><![CDATA[Reply to GameSpy DLL einbinden on Tue, 29 Nov 2005 13:19:43 GMT]]></title><description><![CDATA[<p>Hier wird die Funktion der DLL genutzt um den code zu erzeugen:</p>
<pre><code class="language-cpp">SetLength(Result, Round(Length(Secure) * (4 / 3)));
        func(PChar(Result), PChar(Secure), PChar(Key), AuthType);
</code></pre>
<p>Aber wie soll ich das übersetzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929681</guid><dc:creator><![CDATA[marcusdj]]></dc:creator><pubDate>Tue, 29 Nov 2005 13:19:43 GMT</pubDate></item><item><title><![CDATA[Reply to GameSpy DLL einbinden on Tue, 29 Nov 2005 13:28:06 GMT]]></title><description><![CDATA[<p>habs gleich geschaft! ganz alleine <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";D"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/929687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929687</guid><dc:creator><![CDATA[marcusdj]]></dc:creator><pubDate>Tue, 29 Nov 2005 13:28:06 GMT</pubDate></item><item><title><![CDATA[Reply to GameSpy DLL einbinden on Tue, 29 Nov 2005 13:44:31 GMT]]></title><description><![CDATA[<p>Habs doch noch nicht geschafft <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> denn:</p>
<pre><code class="language-cpp">func(PChar(Result), PChar(Secure), PChar(Key), AuthType);
</code></pre>
<p>Ist ja nicht die anwendung der Funktion. Aber ich finde im Beispiel kein anwendung (wo dann ja auch zu erkennen sein sollte, was für ein wert AuthType ist)....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929716</guid><dc:creator><![CDATA[marcusdj]]></dc:creator><pubDate>Tue, 29 Nov 2005 13:44:31 GMT</pubDate></item><item><title><![CDATA[Reply to GameSpy DLL einbinden on Tue, 29 Nov 2005 13:56:17 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">{*******************************************************************************
*     Create a client token using the 'gsmsalg.dll' file available from:       *
*                                                                              *
********************************************************************************}
function TForm1.GameSpyAuth(Secure, Key: String; AuthType: Integer): String;
var
  lHandle: THandle;
  func: TSkynetAuthDll;
begin
  lHandle := LoadLibrary(pchar(FCurrentDir + '\' + FAuthDLL));
  try
    if lHandle &lt;&gt; 0 then begin
      @func := GetProcAddress(lHandle, 'gsseckey'); //seckey
      if @func &lt;&gt; nil then begin
        SetLength(Result, Round(Length(Secure) * (4 / 3)));
        func(PChar(Result), PChar(Secure), PChar(Key), AuthType);
      end else
        raise EExternalLibraryMethodNotFound.Create('Error locating function in DLL library: ' + FCurrentDir + '\' + FAuthDLL);
    end else
      raise EFileNotFoundError.Create('Missing DLL library file: ' + FCurrentDir + '\' + FAuthDLL);
  finally
    FreeLibrary(lHandle);
  end;
end;
</code></pre>
<p>das ist eine funktion, die beinhaltet ein weitere funktion zu definieren. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Also ich kann da nicht erkennen, das eine funktion der DLL angewand wird.</p>
<p>Sei denn,</p>
<p>func(PChar(Result), PChar(Secure), PChar(Key), AuthType);</p>
<p>Result soll eich char sein, wo Secure und key durch AuthType herreingeneriert wird? mal versuchen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929728</guid><dc:creator><![CDATA[marcusdj]]></dc:creator><pubDate>Tue, 29 Nov 2005 13:56:17 GMT</pubDate></item><item><title><![CDATA[Reply to GameSpy DLL einbinden on Tue, 29 Nov 2005 13:59:02 GMT]]></title><description><![CDATA[<p>So habe wieder eine fehlermeldung wunderbar!</p>
<blockquote>
<p>Projekt nggserver.exe raised exception... in module 'gsmsalg.dll'. Read of address...</p>
</blockquote>
<p>zumindest ist jetzt die funktion richtig, aber immer noch fehler -.-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929734</guid><dc:creator><![CDATA[marcusdj]]></dc:creator><pubDate>Tue, 29 Nov 2005 13:59:02 GMT</pubDate></item></channel></rss>