Thread Win32::API Übergabe Structuren an Dll (5 answers)
Opened by hummer at 2015-07-29 18:52

hummer
 2015-07-29 19:49
#181690 #181690
User since
2013-06-12
22 Artikel
BenutzerIn
[default_avatar]
Hallo,

vielen Dank erst einmal für deine schnelle Antwort,
ich verwende Win32:.API V0.65

Ich habe entsprechend deines Vorschlages folgendes durchgeführt:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    _LocalAddr        => _GetRefToDllFunction("$Path2Dll", 'AdsGetLocalAddress', 'P',  'N','_cdecl'),

sub GetLocalAddr {
my $self = shift;
my @AmsNetId = (0,0,0,0,0,0);
my $Port = 0;

my $Param = pack ('C6 S', @AmsNetId,$Port);

# ggf. noch pack NetId und Port
my $Result = $self->{_LocalAddr}->Call($Param);


print $Result;

(@AmsNetId,$Port) = unpack('C6 S',$Param);
print $Port;
}


Die Fehlermeldung ist schon einmal weg, was ja schon einmal sehr gut ist.
Aber ich bekomme keine Rückgabewerte im $Param
Ich denke, das ich bei dem ersten Pack, etwas falsch mache,
wie kann ich denn die verschachtelte Struktur des C-Codes am besten an die Funktion übergeben?

Eben auch noch folgendes Ausprobiert:
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
sub GetLocalAddr1 {
my $self = shift;

Win32::API::Struct->typedef(
AmsNetId => qw(
UCHAR b[6];
)
);

Win32::API::Struct->typedef(
AmsAddr => qw(
AmsNetId netId;
USHORT port;
)
);

Win32::API->Import("$self->{_Path2Dll}" => 'LONG _cdecl AdsGetLocalAddress(LPAmsAddr pt)');

my %pt;
tie %pt, 'Win32::API::Struct'=> 'AmsAddr';

AdsGetLocalAddress(\%pt);
}


Ein Teil der Fehlermeldung ist weg, nur noch dieses Hier:
Use of uninitialized value in pack at C:/Perl/lib/Win32/API/Struct.pm line 317.
Use of uninitialized value in pack at C:/Perl/lib/Win32/API/Struct.pm line 317.




Hat da noch jemand einen Tipp für mich?

Danke
Last edited: 2015-07-29 20:09:42 +0200 (CEST)

View full thread Win32::API Übergabe Structuren an Dll