Thread Problem mit DLL laden über Win32-API (0 answers)
Opened by 10zeichen_ at 2007-10-06 07:22

10zeichen_
 2007-10-06 07:22
#100382 #100382
User since
2007-10-06
1 Artikel
BenutzerIn
[default_avatar]
Allgemein habe ich das Problem über die Importfunktion die DLL anzusprechen aus der Dokumentation werde ich nicht schlau. Wie spreche ich jetzt eine Unterfunktion in der DLL an und erhalte dessen Rückgabe (string, array, hash oder was auch immer) ?
Vielleicht könntet ihr einen Tipp geben oder die besagte Zeile mit call/callback? als Beispiel schreiben.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use Win32::API;
$|++;

typedef Win32::API::Struct gs_peerchat_ctx => qw{
char gs_peerchat_1;
char gs_peerchat_2;
char gs_peerchat_crypt[256];
};

#typedef struct {
# unsigned char gs_peerchat_1;
# unsigned char gs_peerchat_2;
# unsigned char gs_peerchat_crypt[256];
#} gs_peerchat_ctx;


#gs_peerchat_init
#----------------
#needs 3 arguments:
#- the gs_peerchat_ctx structure
#- the challenge of the host which refers the structure
#- the gamekey of the game

#void gs_peerchat_init(gs_peerchat_ctx *ctx, unsigned char *chall, unsigned char *gamekey)
Win32::API->Import('gs_peerchat', 'gs_peerchat_init(irc_data gs_peerchat_ctx, challenge ^challengepointer, gamekey ^gamekeypointer)');


# ^name = pointer
# irc_data daten die übergeben/gelesen werden (codierte daten in peerchat_ctx, routine callen, klartext in irc_data lesen yadayada)

#gs_peerchat
#-----------
#needs 3 arguments:
#- ctx: the gs_peerchat_ctx structure
#- data: the buffer containing the data to encrypt/decrypt
#- size: the size of the data

#void gs_peerchat(gs_peerchat_ctx *ctx, unsigned char *data, int size)
Win32::API->Import('gs_peerchat', 'gs_peerchat(irc_data gs_peerchat_ctx, irc_buffer ^irc_bufferpointer, size integer)');

#peerchat_ctx = variableninhalt, type gs_peerchat_ctx definiert da oben mit den typedef
#muss vermutlich geändert werden

#1. functionstest, darf das gamekey heissen oder lieber anders weils da oben im import auch genannt ist (nicht das es datacollision gibt)

my $gamekey = "cc3tibwars";
my $challenge_server = "djhQLYRayo;lZ>Y|"; # kann natürlich auch hex sein?
my $challenge_client = "zNwEhedF{qGI^lhs";
# 1 zum decoden, 1 zum entcoden, weiss aber noch nciht welcher was ist, muss also evtl einfach vertauscht werden

my $datenpaket_test1 = "5...-..";#decode
my $datenpaket_test2 = "...V..^.....*.H5!;..P....";#encode
# muss bestimmt alles irgendwie in ein anderes format, pack/unpack hex zeugs


Die DLL wurde aus einem Quellcode in C/C++ erstellt, der ggf. ebenfalls zur Verfügung gestellt werden kann. Die besagten Unterroutinen in C/C++ sehen am Anfang wie folgt aus:
Code: (dl )
void init(ctx *ctx, unsigned char *chall, unsigned char *key) {


bzw.
Code: (dl )
void chat(ctx *ctx, unsigned char *data, int size) {


Eine Anmerkung am Rande: Die Zeichenlänge im Titel ist zu kurz(da will man nen anständigen Titel nehmen und merkt das des nicht geht, toll) und das ein Benutzername nur 10 Zeichen haben darf ist fast eine Beleidigung für die Registrierungsfunktion.

View full thread Problem mit DLL laden über Win32-API