Thread Win32::API::Struct Daten werden nicht übernommen (9 answers)
Opened by hummer at 2015-06-11 12:53

hummer
 2015-06-25 08:03
#181424 #181424
User since
2013-06-12
22 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich bin schon etwas weiter gekommen, habe aber noch einmal eine frage an euch.

Zu der Dll die ich verarbeiten will, habe ich entsprechend ein C-Code Beispiel.
Da ich ja absoluter absoluter C-Anfänger, und kann teilweise mit dem Code nix anfangen.
Daher bitte ich euch um Hilfe bei folgendem Problem und umsetzung von C-Code in professionellen Perl-Code

Ich habe eine DLL, mit einer Funktion um einer ID der Gegenstelle auszulesen.
Im C-Code Beispiel wird mit Strukturen gearbeitet.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  long     nErr, nPort;
AmsAddr Addr;
PAmsAddr pAddr = &Addr;

// Kommunikationsport auf dem ADS Router öffnen
nPort = AdsPortOpen();
nErr = AdsGetLocalAddress(pAddr);

typedef struct {
AmsNetId netId;
USHORT port;
} AmsAddr, *PAmsAddr;

typedef struct {
UCHAR b[6];
} AmsNetId, *PAmsNetId;


LONG AdsGetLocalAddress(
PAmsAddr pAddr
);

Parameter:
pAddr
[out] Zeiger auf die Struktur vom Typ AmsAddr.

Rückgabewert:
Gibt den Fehlerstatus der Funktion zurück.



Mein erster Versuch war folgender.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use strict;
use warnings;
use v5.10;
use Win32::API;

my $ObjDll = {
_OpenPort => GetRefToDllFunction("$Path2Dll", 'AdsPortOpen', '', 'N'),
_LocalAddr => GetRefToDllFunction("$Path2Dll", 'AdsGetLocalAddress', '???', 'N')
};

sub GetRefToDllFunction(....);


# Port öffnen, Rückgabewert des offenen Ports
my $Port = $ObjDll->{_OpenPort}->Call();

# Lesen der NetId
my $Result = $ObjDll->{_LocalAddr}->Call(???);


Ich bekomme seitens des Systems die Fehlermeldung, dass die Adresse nicht gefunden werden kann, da der Port nicht offen ist.
ist ja sowiet auch verständlich, der Port ist zwar offen, die Funktion weis aber nichts davon.

Wie muss ich nun die Strukturen so anpassen, damit ich diese, wie im C-Code verwenden kann.
Kann ich einfach den Port als Parameter übergeben?, dann bekomme ich aber die Adresse nicht zurück.
Der Rückgabewert ist ein ErrorCode

Über hilfe wäre ich sehr dankbar.

Viele Grüße
Last edited: 2015-06-25 08:06:59 +0200 (CEST)

View full thread Win32::API::Struct Daten werden nicht übernommen