Int32 zu array<Byte>



  • Hi,

    ich bekomme Int32 einfach nicht in ein Byte-Array gewandelt. Die Fehlermeldung lautet "'System::Object::ToString': für 6 Überladung(en) gibt es keine zulässige Konvertierung für den this-Zeiger".

    UIManager::getUI()->volume = gcnew System::Int32(SendMessageA(plugin.hwndParent, WM_WA_IPC, -666, IPC_SETVOLUME));
    
    array<Byte>^ msg = Encoding::UTF8->GetBytes(UIManager::getUI()->volume->ToString());
    

    Dabei benötigt GetBytes doch einen String?
    Was mache ich falsch?

    Danke,
    Martin

    EDIT: UIManager::getUI()->volume ist ein System::Int32



  • WO hast Du denn da einen Int32??? Mach doch mal ein einfaches Beispiel...



  • Ah sorry, es liegt an UIManager::getUI()->volume, welches ein volatile System::Int32^ ist. Ich habe durch Zufall herausgefunden, dass es an dem "volatile" liegt. Der Fehler tritt nicht auf, wenn ich volatile entferne. Doch wie kann man thread-sicher an die Bytes rankommen?



  • Das SendMessage liefert kein Int32 zurück, sondern in IntPtr. Das ist schon mal das erste Problem...
    Und wenn Du dann ein IntPtr hast, ist immwer noch die Frage, was das sein soll... ein Zeiger auf einen String!? Wie soll das gehen? Kommt das nicht aus einem anderen Prozess oder ist es der gleiche? Wenn es ein anderer ist, dann kann das so sowieso nicht gehen...

    Zeig doch mal den Code in Native-Code... die Frage ist ja eh: WARUM machst Du es nicht mit reinem Native-Code?



  • Ah, muss der Rückgabewert von SendMessage noch gecastet werden? Da soll ein int rauskommen. Mit threadsicher meine ich, dass zwei verschiedene Threads die Variable UIManager::getUI()->volume verändern können. Braucht man dazu nicht ein volatile, damit der aktuelle Wert immer zuverlässig ausgelesen wird?

    Ich habe gedacht, das sei eleganterer Code als mit sprintf. Außerdem war GetBytes durch googlen die erste Möglichkeit die ich gefunden habe, um die Byte-Darstellung zu bekommen.





  • SendMessage liefert kein "int" sondern, ein LRESULT!
    Und Zugriff auf ein und dieselbe Variable musst Du synchronisieren...



  • Okay, ich lasse diesen Murks lieber, danke! 🙂


Anmelden zum Antworten