Hallo allerseits
Bin daran eine c++ Dll in C# umzuschreiben und habe ein Problem wo ich seit 2 Tagen dran sitze und einfach keine Lösung finde.
Folgendes Prinzip.
2 Dll's kommunizieren miteinander. DLL COMM ist federführend, und meine DLL muss sich bei der DLL(Comm) anmelden mittels DLL-Funktionen, bei welchen ich unter anderem meinen m_hWnd -Handle übergebe.
Will die DLL(Comm) mir nun was mitteilen, schickt sie ein Ereigniss an mein m_hWnd ab, mit einer Msg (WM_USER + wert).
Ich benötige also in meiner DLL eine Funktion welche diese Ereignisse abhandeln kann.
Jetztiger Stand:
Ich kann mich in C# bei dieser DLL(Comm) anmelden und auch Daten senden, welche akzeptiert werden, aber ich bekomme absolut kein Ereigniss seitens der DLL über, da diese laut Log-File sagt dass ich wohl nicht existiere.
Problem:
Ich schaff es nicht die Eregnisse zu bekommen in C#.
Code in c++ : (Header)
Code in c++ : (Body)
In C# habe ich versucht einfach den WndProc zu überschreiben in der Hoffnung dass dort die Ereignisse kommen. Machen sie aber leider nicht :-(
Hier noch den Code wo ich den Window-Handle der DLL(Comm) übergebe.
C++ Code
C# Code (Klasse ist von Form abgeleitet)
Habe auch eine Variante versucht das ganze über CreateWindowEx zu machen, aber da schaffe ich es nichtmal ein Window zu bekommen.
Wäre super wenn jemand einen Tip hätte wie ich sowas umschreiben muss, oder ein Beispiel hätte. Die Sachen die der Herr Google mir gezeigt hat sind nämlich alle unbrauchbar da diese nicht funktionieren oder einfach immer in c++ geschrieben sind.
Danke vielmals
Grüsse
Dani
Bin daran eine c++ Dll in C# umzuschreiben und habe ein Problem wo ich seit 2 Tagen dran sitze und einfach keine Lösung finde.
Folgendes Prinzip.
2 Dll's kommunizieren miteinander. DLL COMM ist federführend, und meine DLL muss sich bei der DLL(Comm) anmelden mittels DLL-Funktionen, bei welchen ich unter anderem meinen m_hWnd -Handle übergebe.
Will die DLL(Comm) mir nun was mitteilen, schickt sie ein Ereigniss an mein m_hWnd ab, mit einer Msg (WM_USER + wert).
Ich benötige also in meiner DLL eine Funktion welche diese Ereignisse abhandeln kann.
Jetztiger Stand:
Ich kann mich in C# bei dieser DLL(Comm) anmelden und auch Daten senden, welche akzeptiert werden, aber ich bekomme absolut kein Ereigniss seitens der DLL über, da diese laut Log-File sagt dass ich wohl nicht existiere.
Problem:
Ich schaff es nicht die Eregnisse zu bekommen in C#.
Code in c++ : (Header)
Code:
#define COMM (WM_USER + 513)
//{{AFX_VIRTUAL(CTestDlg)
protected:
virtual LRESULT OnMessageComm(WPARAM wParam, LPARAM lParam);
//}}AFX_VIRTUAL
Code in c++ : (Body)
Code:
BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
//{{AFX_MSG_MAP(CTestDlg)
ON_MESSAGE(COMM, OnMessageComm)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
LRESULT CTestDlg::OnMessageComm(WPARAM wParam, LPARAM lParam)
{
}
In C# habe ich versucht einfach den WndProc zu überschreiben in der Hoffnung dass dort die Ereignisse kommen. Machen sie aber leider nicht :-(
Code:
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case COMM:
break;
}
base.WndProc(ref m);
}
Hier noch den Code wo ich den Window-Handle der DLL(Comm) übergebe.
C++ Code
Code:
SetHandle m_SetHandle = NULL;
m_SetHandle = (SetHandle)GetProcAddress(m_hDLL, "SetHandle");
m_SetHandle(m_hWnd, 513);
C# Code (Klasse ist von Form abgeleitet)
Code:
delegate void SetHandle(IntPtr hwnd, int a);
IntPtr m_SetHandle = IntPtr.Zero;
m_SetHandle = GetProcAddress(m_hDll, "SetHandle");
SetHandle oSetHandle = (SetHandle)Marshal.GetDelegateForFunctionPointer(m_SetHandle, typeof(SetHandle));
oSetHandle(this.Handle, 513);
Habe auch eine Variante versucht das ganze über CreateWindowEx zu machen, aber da schaffe ich es nichtmal ein Window zu bekommen.
Wäre super wenn jemand einen Tip hätte wie ich sowas umschreiben muss, oder ein Beispiel hätte. Die Sachen die der Herr Google mir gezeigt hat sind nämlich alle unbrauchbar da diese nicht funktionieren oder einfach immer in c++ geschrieben sind.
Danke vielmals
Grüsse
Dani