| Stefano Mora |
Conversioni ....
Ciao a tutti,
vorrei sapere se ha ancora senso passare un instance handle da un'applicazione VB.NET ad una DLL scritta in C (quindi non gestita) che deve creare una finestra con una CreateWindow() usando appunto questo handle. In VB6 funzionava senza problemi ma ora ricevo un errore di tipo invalid handle. Ciao e grazie ! |
| Corrado Cavalli [MVP] |
Re: Conversioni ....
Prova a postare un esempio di come passi l'handle alla dll e la dichiarazione della dll stessa... -- Corrado Cavalli [Microsoft .NET MVP-MCP] UGIdotNET - http://www.ugidotnet.org Weblog: http://www.ugidotnet.org/710.blog ---------------------- Questo messaggio è stato postato da microsoft.public.it.dotnet.vb. |
| Stefano Mora |
Re: Conversioni ....
Nella DLL ho questa funzione:
int __stdcall InitSmokeMeter (HINSTANCE hInst, char *port, WNDPROC lpWndProc, HWND *hwnd, long *MsgCode) In VB l'ho dichiarata come: <DllImport("opaclib.dll")> Public Function InitSmokeMeter(ByVal hInst As IntPtr, ByVal port As String, ByVal lpWndProc As NotifyErrorDelegate, ByRef hwnd As IntPtr, ByRef msgcode As Integer) As TecError End Function La richiamo dal VB.NET con: returnErrorCode = InitSmokeMeter(Runtime.InteropServices.Marshal.GetHINSTANCE(myModule), "COM1", AddressOf NotifyError, hwnd, lWM_OPACLIB) Entro la IniSmokeMeter() richiamo la CreateWindowsEx come segue: *hWnd = CreateWindowEx(WS_EX_PALETTEWINDOW, szAppName, szAppName, WS_CAPTION | WS_POPUP | WS_SYSMENU, 0, 0, 256, 64, NULL, NULL, hInst, NULL); installando come WndProc la seguente funzione in VB: Public Function NotifyError(ByVal hw As Integer, ByVal uMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer e dichiarando: Public Delegate Function NotifyErrorDelegate(ByVal hw As Integer, ByVal uMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer Il problema è che la CreateWindowEx esce con un errore, la GetLAstError ritorna il codice ERROR_INVALID_WINDOW_HANDLE. Se vado a vedere che messaggi arrivano all WndProc (che è la funzione NotifyError(..) ) scopro che arriva il msg 129 WM_NCCREATE e il msg 130 WM_NCDESTROY. Il gestore dei precedenti messaggi è la DefWindowProc(....), quindi il gestore di default dei messaggi. Il giro è un po' contorto ma purtroppo non posso, almeno per il momento, cambiarlo. Graize, ciao ! |
| Stefano Mora |
Re: Conversioni .... risolto !
Ho trovato !
Il problema era proprio sulla definizione di DefWindowProc(....) i cui parametri erano tutti ByRef !! Grazie ! |