Entwickler-Ecke
C# - Die Sprache - Konvertieren von object in long[]
relapse - Di 21.02.12 12:15
Titel: Konvertieren von object in long[]
Hallo, eine neue Frage von mir: Ich muss folgendes Beispiel im Pseudocode in C# umsetzen:
Quelltext
1: 2: 3:
| DoVerb("Documents[0].pages[2]", "TranslateScreenPoint", DataIn(sx, sy), DataOut, 0); px = DataOut[0]; // Page x coordinate py = DataOut[1]; // Page y coordinate |
Die Funktion DoVerb hat diese Signatur:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| HRESULT DoVerb( BSTR ObjectName, BSTR OperationName, VARIANT DataIn, VARIANT* DataOut, LONG Flags ); |
In C# werden DataIn und DataOut als "object" bzw. "out object" definiert.
Hat jemnand eine Idee wie man ein "object" in ein "long[]" konvertieren kann?
Danke!
Ralf Jansen - Di 21.02.12 12:57
Zitat: |
In C# werden DataIn und DataOut als "object" bzw. "out object" definiert. |
Hast du den entsprechenden P/Invoke (darum geht doch oder und nicht einfach um Pseudocode) Aufruf den schon ausprobiert? Wenn ja solltest du doch das zurück gegebene object im Debugger inspizieren können um rauszufinden was du damit anstellen kannst.
relapse - Di 21.02.12 15:24
Das geht so (vielleicht nicht besonders elegant, funktioniert aber trotzdem):
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| object[] dataIn = new object[2]; dataIn[0] = koordinatenWindow[0]; dataIn[1] = koordinatenWindow[3]; var dataOut = new object(); ax.DoVerb("Documents[0].pages[" + docSeite + "]", "TranslateScreenPoint", dataIn, out dataOut, 0); double[] arr = new double[2]; arr = (double[])dataOut; double px = arr[0]; double py = arr[1]; |
Nach dem Aufruf der DoVerb-Funktion war der out-Parameter "dataOut" mit Daten gefüllt, nur konnte ich auf die mit Hilfe des []-Operators nicht zugreifen. Das war ja das eigentliche Problem. Nun nach dem Casten (oder Boxen?) war es möglich.
P.S.: Pardon, das war eigentlich "Konvertieren von object in
double[]".
Th69 - Di 21.02.12 18:13
Hallo relapse,
dann ist aber das Neuanlegen des Arrays (new double[2]) völlig überflüssig, da du den Variablen-Inhalt gleich wieder in der nächsten Zeile überschreibst.
Demnach besser gleich so:
C#-Quelltext
1:
| double[] arr = (double[])dataOut; |
Bzw. die P/Invoke-Deklaration der Methode so abändern, daß es gleich als
double[] zurückgegeben wird.
relapse - Mi 22.02.12 09:01
Zitat: |
Bzw. die P/Invoke-Deklaration der Methode so abändern, daß es gleich als double[] zurückgegeben wird. |
Wie geht das? Kannst du bitte es zeigen?
Th69 - Mi 22.02.12 11:27
Hallo relapse,
woher kommt denn die Deklaration von DoVerb und was ist ax für eine Klasse?
Wenn ich das jetzt so lese, scheint mir das eher ein "ActiveX"-Objekt zu sein (und kein eigener P/Invoke).
Dann gibt es keinen anderen Weg als die nachträgliche Konvertierung des Datentyps von object in double[].
relapse - Mi 22.02.12 14:23
Ja genau, das ist ein ActiveX-Steuerelement.
Was ist denn ein P/Invoke?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!