Entwickler-Ecke

Basistechnologien - Operator Problem


-CrimeTime- - Mi 20.10.10 22:52
Titel: Operator Problem
Hallo,
ich bekomme diese Fehlermeldung: "Der Operator "+" kann nicht auf Operanden vom Typ "System.IntPtr" und "int" angewendet werden."

in dieser Zeile : FirstObject = Reader.ReadUInt32((IntPtr)(ObjectManager + FirstObjectOffset));

muss dazu sagen das ich ein Anfänger bin, habe schon Gegooglet aber dort bekomme ich kaum hilfestellung zu diesem Fehler.

Gruß CrimeTime


Moderiert von user profile iconChristian S.: Topic aus Sonstiges (.NET) verschoben am Do 21.10.2010 um 09:53


jaenicke - Do 21.10.10 06:11

Hallo und :welcome:

Einer deiner beiden Operanden ist eben ein int und einer ein IntPtr. Also musst du den, der ein IntPtr ist auf int casten, wenn du die addieren willst.

Ich vermute aber das willst du gar nicht. Denn so addierst du nicht den Wert im IntPtr sondern den Zeiger auf die Struktur IntPtr...

Um einen Offset zu einem IntPtr zu addieren gibt es (wie sollte es auch sonst heißen) Add:
http://msdn.microsoft.com/de-de/library/system.intptr.add.aspx

Also vermute ich einmal, dass ObjectManager der IntPtr ist, dann sieht das so aus:

C#-Quelltext
1:
FirstObject = Reader.ReadUInt32(ObjectManager.Add(FirstObjectOffset));                    


-CrimeTime- - Do 21.10.10 13:32

Danke dieses Problem wäre dann ja gelöst, aber es traten nun neue Probleme auf:



C#-Quelltext
1:
ClientConnection = (IntPtr)Reader.ReadInt32(StaticClientConnection);                    

Markiert "Reader.ReadInt32(StaticClientConnection);"
Fehlermeldung:
Die beste Übereinstimmung für die überladene MemoryReader.Memory.ReadInt32(System.IntPtr)-Methode hat einige ungültige Argumente.


C#-Quelltext
1:
CurrentObject.BaseAddress = FirstObject;                    

Markiert: FirstObject;

Fehlermeldung:
Der Typ "System.IntPtr" kann nicht implizit in "uint" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.)

Edit:

ClientConnection = (IntPtr)Reader.ReadInt32(StaticClientConnection);

gefixed mit

C#-Quelltext
1:
ClientConnection = (IntPtr)Reader.ReadInt32((IntPtr)StaticClientConnection);                    



Edit2: Alle Fehler behoben.