Unbekannter Funktionsparameter (void*)
-
Hi,
sorry dass ich heute schon den zweiten Thread aufmache und frage, aber mit google finde ich immer nur Lösungen zum standard C++ und das Buch dass ich mir aus der Bücherei bestellt habe (Visual C++) hat auch nur ein Kapitel CLI C++ und das hat mir nicht weitergeholfen.
Ich möchte eine Methode erstellen, die ein Übergabeparameter besitzt, der "unbekannt" ist. In C kann man das mit "
void *param
" definieren.Es soll z. B. möglich sein ein int, unsigned long oder auch Array zu übergeben.
Lg Chriss
-
Dazu kannst Du System::Object^ nehmen.
Simon
-
Hi simon,
Und nochmal danke!
Aber irgendwie funktioniert das nicht. Ich möchte - je nach Hardware - unterschiedliche Dlls laden, die immer die fast die gleiche Funktion haben. Die Funktion unterscheidet sich nur im Rückgabewert, denn es wird je nach Hardware unterschiedlich viel gelesen.
Im ersten Fall werden 8 Bit gelesen (unsigned byte*). Dann hab ich mir gedacht dass ich einen Cast (System::Byte^) mache, aber es funktioniert nicht.
Funktionsdeklaration:
Read(unsigned long a_ulStartIndex, unsigned long a_ulLen, unsigned char* a_ucValue)
Aufruf:
Read(a_ulStartIndex, a_ulLength, (System::Byte^) a_objData);
a_objData wurde der Funktion, wie von dir beschrieben als Object^ übergeben.
Was mach ich falsch?
Lg Kerberos
-
Das geht so nicht.
Du musst dein Datentyp schon kennen und entsprechend in eine Byte Sequenz umwandeln.Simon
-
Hi,
versteh ich nicht ganz. Der Funktion aus der DLL kann ich doch auch ein beliebigen Zeiger (void*) übergeben?
Ich weiß ja nicht wie das intern in der DLL gegeregelt ist, aber der Funktionsaufruf ist wie folgt deklariert:
long Read (MODUL_STRUCT *aModule, unsigned long ulStartIndex, unsigned long ulLength, void *pvValue);
Der void Zeiger wird- so wie ich das verstanden habe - dazu verwendet um die Funktion Hardwareunabhängig zu gestalten, da je nach hardware ein unterschiedlich langer Rückgabe wert geliefert wird.
Lg Chriss