Mal was perverses: pass char* to vb6 proc



  • hi,
    ich bin irgendwie dem c++ noch nicht so ganz mächtig muss aber nun
    eine c++ dll in vb nutzen diese dll liest kontinuierlich werte ...
    nun dachte ich mir ich mache das so das wenn ein wert kommt das ich eine
    prozedur aufrufe die von einem anderen programm übergeben wurde
    z.b. ein vb programm

    so nun habe ich mal folgenden code geschrieben der sehr vereinfacht ist

    #include <windows.h>
    void __stdcall DoSomething(int someint, char* name, void* UserProc){
    void ( __stdcall *lpUserProc ) (int);  // point to UserProc
    lpUserProc = UserProc;
    (*lpUserProc)(199); // call the UserProc
    }
    

    das ganze gestaltet sich in vb wie folgt ...

    Private Declare Sub DoSomething Lib "my.dll" _
            (ByVal retries As Integer, ByVal portname As String, ByVal lpfnMyFunc As Long)
    
    Private Sub Command1_Click()
        DoScale 10, "COM1", AddressOf MyCallBackFunction
    End Sub
    

    und in einem extra modul braucht man natürlich die callbackfunction

    Sub MyCallBackFunction(ByVal i As Integer)
    MsgBox i
    End Sub
    

    das geht leider nicht anders in vb es muss ein extra modul sein
    so das funzt alles wunderbarstens
    aber wehe ich versuche dem UserProc char* zu übergeben dann hagelts read error
    die callbackfunction wollte ich eigentlich so haben :

    Sub MyCallBackFunction(ByVal i As String)
    MsgBox i
    End Sub
    

    ich bin mir sicher es sind nur ein paar kleine sachen zu ändern doch ich schaffe es seit tagen nicht lol

    danke für eure hilfe



  • es muss natürlich auch

    Private Sub Command1_Click()
        DoSomethin 10, "COM1", AddressOf MyCallBackFunction
    End Sub
    

    heissen 😉 ich habe die sache sehr stark vereinfacht damit es nicht so vil lesearbeit ist hoffe mir kann jemand helfen
    danke nochmal



  • so wie ich es dort verstehe: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon98/html/vbconpassingstringstodllprocedure.asp
    musst du der callback-function einen BSTR (VB String = C++ BSTR) übergeben, der mit SysAllocString aus einem Unicode-String erzeugt werden kann.


Anmelden zum Antworten