AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Header übersetzung, kleines Problemchen

Ein Thema von DelphiNub · begonnen am 8. Sep 2008 · letzter Beitrag vom 8. Sep 2008
Antwort Antwort
DelphiNub

Registriert seit: 20. Nov 2006
11 Beiträge
 
#1

Header übersetzung, kleines Problemchen

  Alt 8. Sep 2008, 13:25
Moinsen, ich hätte da ma 'n Problem ^^

Ich schreib zZ an einem Progrämmchen zum überwachen und steuern von Gameservern auf Source-Engine Basis (HL2,CSS,etc)
(Durch Zufall) bin ich dann vor kurzem auf eine Bibliothek direkt von Valve (von denen ist HL2 usw ^^) gestoßen um die dedizierten Server direkt anzusprechen. Geliefert wird eine .dll inkl. Hifle und Header datei für C/C++. (Link)

Eigentlich sollte es ja kein Problem sein das ganze für Delphi verwendbar zu machen, allerdings bin ich da auf was gestoßen womit ich (noch) nichts anfangen kann

Folgendes:
Code:
typedef(WINAPI* SSQ_CALLBACK)(DWORD type,PSSQ_REPLY_UNION reply);

"SSQ_CALLBACK" ist ein "typedef union":
Code:
typedef union
{
  PSSQ_BATCH_REPLY batch_reply;
  char* log_reply;
  PSSQ_RULES_REPLY rules_reply;
  char* rcon_reply;
  BOOL log_notify;
} SSQ_REPLY_UNION, *PSSQ_REPLY_UNION;

"SSQ_CALLBACK" wird auch später in einer Funktion als Parameter erwartet.

Im Anhang mal der gesamte header und mein bisheriger Versuch für Delphi (Der soweit auch funktioniert, nur halt alles was im zusammenhang mit diesem SSQ_CALLBACK ist funktioniert nicht :/).

Danke für jegliche Hilfe schonmal im Vorraus ^^
Angehängte Dateien
Dateityp: pas ssq_417.pas (4,1 KB, 3x aufgerufen)
Dateityp: h ssq_194.h (2,3 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.123 Beiträge
 
Delphi 12 Athens
 
#2

Re: Header übersetzung, kleines Problemchen

  Alt 8. Sep 2008, 14:23
auf den ersten Bilck würd ich es so übersetzen
Delphi-Quellcode:
type
  SSQ_REPLY_UNION = record
    batch_reply: PSSQ_BATCH_REPLY;
    log_reply: PChar;
    rules_reply: PSSQ_RULES_REPLY;
    rcon_reply: PChar;
    log_notify: LongBool;
  end;
  PSSQ_REPLY_UNION = ^SSQ_REPLY_UNION;
  SSQ_CALLBACK = Procedure(typ: DWORD; reply: PSSQ_REPLY_UNION); StdCall;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
DelphiNub

Registriert seit: 20. Nov 2006
11 Beiträge
 
#3

Re: Header übersetzung, kleines Problemchen

  Alt 8. Sep 2008, 17:21
Ja schonmal danke dafür ^^
Hab mal ein wenig in der Doku gekramst und das stand über die SSQ_Callback funktion:

Code:
The SSQ_Callback function is an application-defined callback function.

BOOL WINAPI SSQ_Callback(
   DWORD type,
   PSSQ_REPLY_UNION reply
);
[...]
Return Values:

The function should return TRUE to get all messages of a message loop.
If the function returns FALSE a message loop, if exists, will break.
Von daher nehme ich mal an das dann so aussehen müsste:
SSQ_CALLBACK = function( typ: DWORD; reply: PSSQ_REPLY_UNION ):BOOL; StdCall; Da SSQ_REPLY_UNION ein uniun struct ist und google mir bisher ausgespuckt hat das das dann ein variant record in delphi wäre sieht's bei mir nu so aus:
Delphi-Quellcode:
  
  SSQ_REPLY_UNION = record
    case Word of
     0: (batch_reply: PSSQ_BATCH_REPLY;);
     1: (log_reply: PChar;);
     2: (rules_reply: PSSQ_RULES_REPLY;);
     3: (rcon_reply: PChar;);
     4: (log_notify: Bool;);
  end;
  PSSQ_REPLY_UNION = ^SSQ_REPLY_UNION;
Meine funktion danach dann (als test)
Delphi-Quellcode:
function MyCB( typ: DWORD; reply: PSSQ_REPLY_UNION ): BOOL; stdcall;
begin
  form1.ListBox1.Items.Add( inttostr( typ ) ); // jaja, is nich schön
  result:= true;
end;
Beim OnCreate dann die initialisierung und ein "SSQ_SetCallbackAddress( MyCB )", was auch true zurück gibt, also von daher ja schonmal alles i.O.

Wenn ich nun aber eine funktion aufrufe die damit im zusammenhang steht gibt mir der Debugger: "Invalid parameter/packet" und danach funktioniert garnichts mehr..
  Mit Zitat antworten Zitat
DelphiNub

Registriert seit: 20. Nov 2006
11 Beiträge
 
#4

Re: Header übersetzung, kleines Problemchen

  Alt 8. Sep 2008, 20:08
Hmmm, hab mir mal ein wenig die quelldatei der dll angeschaut.
(einigermaßen) zurückführen konnte ich das ganze auf die Überprüfung der Callback-Addresse.

Code:
HIWORD(Callback)==0
Scheint immer richtig zu sein und gibt deswegen die besagte Debug-Nachricht raus. Bin alle funktionen die callback überprüfen durch gegangen, es gibt noch eine weiter überprüfung ob die dll initialisiert wäre aber da andere Funktionen damit ohne Probleme laufen wirds wohl das erste sein.

Hmmm, irgendwie wirds dann wohl doch einfacher wenn ich das ganze von Hand selber schreibe...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz