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 programmso 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 Subund in einem extra modul braucht man natürlich die callbackfunction
Sub MyCallBackFunction(ByVal i As Integer) MsgBox i End Subdas 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 Subich 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 Subheissen
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.