Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7187[/thread]

Inhalt einer Speicheradresse auslesen?



<< |< 1 2 >| >> 20 Einträge, 2 Seiten
Hellmaker
 2005-08-05 14:53
#56986 #56986
User since
2005-08-05
16 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

Über die Dereferenzierung einer Referenz, z.B. SCALAR<0x603b37> erhalte ich den scalaren Inhalt der Adresse 0x603b37. Richtig?!

Aber wie komme ich an den Inhalt, wenn ich nur die Adresse 0x603b37, jedoch keine Referenz darauf habe?!

mit
Code: (dl )
$adr = "SCALAR<0x603b37>";

gehts leider nicht, da bemerkt wird, dass ich hier zu bescheissen versuch :-(
Can't use string ... as SCALAR ref ...

Weis da jemand einfache Abhilfe?!

Grüße
renee
 2005-08-05 15:00
#56987 #56987
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Vielleicht hilft Dir der Thread weiter: http://board.perl-community.de/cgi-bin....;t=1733
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Hellmaker
 2005-08-05 15:58
#56988 #56988
User since
2005-08-05
16 Artikel
BenutzerIn
[default_avatar]
Hat leider auch nicht geholfen. Entwerder:
uninitialized value in hex at Reg.pm line 19
oder Absturz der perl.exe

Trotzdem Danke!
Relais
 2005-08-05 16:05
#56989 #56989
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
Skalare sind komplexere Wesen als einfache Behälter mit Adresse.
Der Fehler ist Dir also schon unterlaufen, als Du die Referenz stringifiziert hast.
An dieser Stelle solltest Du ansetzen und das Problem ausmerzen.
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
esskar
 2005-08-05 21:51
#56990 #56990
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
das müssen doch rundeklammern sein; also z.B.
Code: (dl )
my $addr = "SCALAR(0x2262f4)";
Strat
 2005-08-06 15:30
#56991 #56991
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
hilft es vielleicht, die struktur zu serialisieren? z.B. mit Storable? in perl mit speicheradressen rumzufuhrwerken halte ich nicht fuer besonders geglueckt...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Hellmaker
 2005-08-08 12:21
#56992 #56992
User since
2005-08-05
16 Artikel
BenutzerIn
[default_avatar]
Quote
das müssen doch rundeklammern sein

klar, sorry, war mein Fehler im Posting. Sind natürlich runde Klammern.

Quote
... storable ...

klappt leider auch nicht... :-(\n\n

<!--EDIT|Hellmaker|1123489540-->
esskar
 2005-08-08 13:46
#56993 #56993
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Hellmaker,08.08.2005, 10:21]klappt leider auch nicht... :-([/quote]
dann ezeig doch mal etwas code!
Relais
 2005-08-08 14:06
#56994 #56994
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Hellmaker,05.08.2005, 12:53]Über die Dereferenzierung einer Referenz, z.B. SCALAR<0x603b37> erhalte ich den scalaren Inhalt der Adresse 0x603b37. Richtig?![/quote]
Nochmal. Ganz wichtig: Diese Annahme ist FALSCH.

Die Adresse ist zwar richtig, aber dort befindet sich kein "skalarer Inhalt", sondern ein Objekt. Dieses beinhaltet unter anderem auch die gesuchten Daten, aber Du weißt noch nicht, wo.

Dein Ansatz ist falsch, Du müßtest entweder

zurück an die Stelle, wo Du noch C-Programmierer warst und Perl ganz der Rücken kehren. Dann wird das mit dem Speicheradressen auslesen vermutlich funktionieren.

Oder Du willst Perl Programmieren, dann mußt Du dahin zurück, wo Du die Referenz auf Deinen Perl-Skalar verloren hast, und die wiederfinden.

Lies perldoc perlreftut

Quote
Aber wie komme ich an den Inhalt, wenn ich nur die Adresse 0x603b37, jedoch keine Referenz darauf habe?!


Gar nicht. Das geht nicht. Das will ein Perl-Programmierer nicht.
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
Hellmaker
 2005-08-08 14:15
#56995 #56995
User since
2005-08-05
16 Artikel
BenutzerIn
[default_avatar]
Hier der Code um die Funktion FT_Open der FTD2XX.dll zu nutzen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sub FT_OpenPM{
   my ( $self, $devNum ) = @_;
   my $status = $self->{'FT_STATUS'};
   my $handle = $self->{'FT_HANDLE'};
   #import function
   my $fct_open = new Win32::API( 'FTD2XX', 'FT_Open', 'IP', 'I' );
   unless( $fct_open ){
       print("FT_Open not found!\n");
       return 0;
   }
   #call imported function
   $status = $fct_open->Call( $devNum, $handle );
   $handle =~ s/\0.*$//;
   #$handle = Storable::retrieve( $handle );
   #return the functions return status and the handle
   return ($status, $handle);

$handle enthält nun allem Anschein nach eine Adresse, welche jedoch im ASCII-Format vorhanden ist: á;9, welche in Hex folgendermaßen aussehen müsste: 0xe13b39

bei einkommentieren der "storable"-zeile erhalte ich jedoch in der konsole folgende meldung:
Quote
can't open á;9: No such file or directory

bzw.
Quote
can't open 14760761: No such file or directory

,wenn $handle auf die Hex-Adresse gesetzt wird.

Da muss es doch ne Möglichkeit geben den Inhalt dieser Adresse anzeigen zu lassen. Oder liegts daran, dass sich der C Pointer und die Perl Variable nicht "verstehen"?
<< |< 1 2 >| >> 20 Einträge, 2 Seiten



View all threads created 2005-08-05 14:53.