From: Jeremy W. <jez...@ho...> - 2005-12-03 15:09:47
|
Hi, I'm trying to fix Scintilla, with the aim of creating a new release of this module. The problem is that Scintilla defines and uses it's own PERLWIN32GUI_USERDATA structure. As this structure has changed over time in Win32-GUI it creates all kinds of problems with this module (Scintilla subclasses Win32-GUI, and uses the PERLWIN32GUI_USERDATA structure passed to it by Win32-GUI). The most extreme behaviour is with perl 5.8.x where the Scintilla does not process events - there is also cases where Scintilla crashes. I've managed to get a build of Scintilla working, but I've got several issues. Instead of defining it's own version of PERLWIN32GUI_USERDATA it now picks it up from GUI.h - which I think is the best solution (?). 1) The original Scintilla: #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include <windows.h> #include "./include/Scintilla.h" changed to: #include "../Win32-GUI/GUI.h" #include "./include/Scintilla.h" However, when compiling with VC I get two errors: *** Using Preserved Perl context. ../Win32-GUI/GUI.h(439) : error C2143: syntax error : missing ')' before '=' ../Win32-GUI/GUI.h(439) : error C2072: 'DoHook' : initialization of a function ../Win32-GUI/GUI.h(439) : error C2059: syntax error : ')' ../Win32-GUI/GUI.h(809) : error C2059: syntax error : 'string' NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0x2' Stop. this is with the line: void DoHook(NOTXSPROC LPPERLWIN32GUI_USERDATA perlud, UINT uMsg, WPARAM wParam, LPARAM lParam, int* PerlResult, int notify = 0); removing " = 0" fixes that issue. The second error: *** Using Preserved Perl context. ../Win32-GUI/GUI.h(809) : error C2059: syntax error : 'string' NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0x2' Stop. this is with: extern "C" BOOL WINAPI GetWindowInfo( HWND hwnd, PWINDOWINFO pwi ); Commenting out this code removes the error. In both cases I don't understand why they cause errors? 2) I'm confused about the Perl context and how it's used within Win32-GUI - and how Scintilla should handle things. I've got it working by doing: dTHX; /* fetch context */ in the Scintilla event handlers, but had to remove NOTXSCALL/NOTXSPROC in some functions where the context isn't used/needed. If it would help, I can check in what I've got, with the idea of fixing things once I've got my head around these issues? Cheers, jez. |