|
View:
New views
5 Messages
—
Rating Filter:
Alert me
|
|
|
using windows api functionsHello, World!))) I'm try to generate pyd file, which simple should create one window, and it's necessary to use windiws api functions. I just take example from msdn:
#include <windows.h> // Global variable HINSTANCE hinst; // Function prototypes. //int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int); BOOL InitApplication(HINSTANCE); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM); // Application entry point. int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; if (!InitApplication(hinstance)) return FALSE; if (!InitInstance(hinstance, nCmdShow)) return FALSE; BOOL fGotMessage; while ((fGotMessage = GetMessage(&msg, (HWND) NULL, 0, 0)) != 0 && fGotMessage != -1) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; UNREFERENCED_PARAMETER(lpCmdLine); } BOOL InitApplication(HINSTANCE hinstance) { WNDCLASSEX wcx; // Fill in the window class structure with parameters // that describe the main window. wcx.cbSize = sizeof(wcx); // size of structure wcx.style = CS_HREDRAW | CS_VREDRAW; // redraw if size changes wcx.lpfnWndProc = MainWndProc; // points to window procedure wcx.cbClsExtra = 0; // no extra class memory wcx.cbWndExtra = 0; // no extra window memory wcx.hInstance = hinstance; // handle to instance wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION); // predefined app. icon wcx.hCursor = LoadCursor(NULL, IDC_ARROW); // predefined arrow wcx.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH); // white background brush wcx.lpszMenuName = "MainMenu"; // name of menu resource wcx.lpszClassName = "MainWClass"; // name of window class wcx.hIconSm = (HICON)LoadImage(hinstance, // small class icon MAKEINTRESOURCE(5), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR); // Register the window class. return RegisterClassEx(&wcx); } BOOL InitInstance(HINSTANCE hinstance, int nCmdShow) { HWND hwnd; // Save the application-instance handle. hinst = hinstance; // Create the main window. hwnd = CreateWindow( "MainWClass", // name of window class "Sample", // title-bar string WS_OVERLAPPEDWINDOW, // top-level window CW_USEDEFAULT, // default horizontal position CW_USEDEFAULT, // default vertical position CW_USEDEFAULT, // default width CW_USEDEFAULT, // default height (HWND) NULL, // no owner window (HMENU) NULL, // use class menu hinstance, // handle to application instance (LPVOID) NULL); // no window-creation data if (!hwnd) return FALSE; // Show the window and send a WM_PAINT message to the window // procedure. ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); return TRUE; } LRESULT CALLBACK MainWndProc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch(msg) { case WM_PAINT: ValidateRgn(hwnd, NULL); break; case WM_DESTROY: { PostQuitMessage(0); return(0); } break; } return(DefWindowProc(hwnd, msg, wparam, lparam)); } and in compile process I get this errors:
c:/boost_1_40_0/boost/python/make_function.hpp: In function `boost::python::api: :object boost::python::make_function(F) [with F = int (*)(HINSTANCE__*, HINSTANCE__*, CHAR*, int)]': c:/boost_1_40_0/boost/python/def.hpp:82: instantiated from `boost::python::api ::object boost::python::detail::make_function1(T, ...) [with T = int (*)(HINSTANCE__*, HINSTANCE__*, CHAR*, int)]' c:/boost_1_40_0/boost/python/def.hpp:91: instantiated from `void boost::python ::def(const char*, Fn) [with Fn = int (*)(HINSTANCE__*, HINSTANCE__*, CHAR*, int)]' windowmsdn.cpp:141: instantiated from here c:/boost_1_40_0/boost/python/make_function.hpp:103: error: invalid conversion from `int (*)(HINSTANCE__*, HINSTANCE__*, CHAR*, int)' to `int (*)(HINSTANCE__*, HINSTANCE__*, CHAR*, int)' c:/boost_1_40_0/boost/python/make_function.hpp:103: error: initializing argument 1 of `boost::mpl::vector5<T0, T1, T2, T3, T4> boost::python::detail::get_signature(RT (*)(T0, T1, T2, T3), void*) [with RT = int, T0 = HINSTANCE__*, T1 = HINSTANCE__*, T2 = CHAR*, T3 = int]' I will be very grateful for any help. email: blackmet.darkangel@...
_______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@... http://mail.python.org/mailman/listinfo/cplusplus-sig |
|
|
Re: using windows api functionsOn 11/07/2009 08:43 AM, blackmet blackmet wrote:
> > c:/boost_1_40_0/boost/python/make_function.hpp:103: error: > invalid conversion from `int (*)(HINSTANCE__*, HINSTANCE__*, CHAR*, > int)' to `int (*)(HINSTANCE__*, HINSTANCE__*, CHAR*, int)' > c:/boost_1_40_0/boost/python/make_function.hpp:103: error: > initializing argument 1 of `boost::mpl::vector5<T0, T1, T2, T3, T4> > boost::python::detail::get_signature(RT (*)(T0, T1, T2, T3), void*) > [with RT = int, T0 = HINSTANCE__*, T1 = HINSTANCE__*, T2 = CHAR*, T3 = > int]' That is a confusing error message, isn't it. I seem to recall having seen similar errors in the past, though I don't recall what caused it. Can you show the declaration of the function that you are attempting to wrap ? Could it be that it is using non-standard calling conventions (stdcall, fastcall, or some such), causing the compiler to detect a mismatch, without being able to report a clear error message ? Just a shot in the dark... Stefan -- ...ich hab' noch einen Koffer in Berlin... _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@... http://mail.python.org/mailman/listinfo/cplusplus-sig |
|
|
Re: using windows api functions2009/11/7 Stefan Seefeld <seefeld@...>
It is quite simple: BOOST_PYTHON_MODULE(_winmain) { using namespace boost::python; def("WinMain", WinMain); } _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@... http://mail.python.org/mailman/listinfo/cplusplus-sig |
|
|
Re: using windows api functionsOn 11/07/2009 09:58 AM, blackmet blackmet wrote:
> > > 2009/11/7 Stefan Seefeld <seefeld@... > <mailto:seefeld@...>> > > On 11/07/2009 08:43 AM, blackmet blackmet wrote: > > > c:/boost_1_40_0/boost/python/make_function.hpp:103: error: > invalid conversion from `int (*)(HINSTANCE__*, HINSTANCE__*, > CHAR*, int)' to `int (*)(HINSTANCE__*, HINSTANCE__*, CHAR*, int)' > c:/boost_1_40_0/boost/python/make_function.hpp:103: error: > initializing argument 1 of `boost::mpl::vector5<T0, T1, T2, > T3, T4> > boost::python::detail::get_signature(RT (*)(T0, T1, T2, T3), > void*) > [with RT = int, T0 = HINSTANCE__*, T1 = HINSTANCE__*, T2 = > CHAR*, T3 = int]' > > > That is a confusing error message, isn't it. I seem to recall > having seen similar errors in the past, though I don't recall what > caused it. Can you show the declaration of the function that you > are attempting to wrap ? Could it be that it is using non-standard > calling conventions (stdcall, fastcall, or some such), causing the > compiler to detect a mismatch, without being able to report a > clear error message ? > > It is quite simple: > > BOOST_PYTHON_MODULE(_winmain) > { > using namespace boost::python; > def("WinMain", WinMain); What is "WinMain" ? Oh, and looking again at the error I wonder what HINSTANCE__ is, and how you want to convert that to Python. But that is an entirely different issue, unrelated to the error you are getting. Stefan -- ...ich hab' noch einen Koffer in Berlin... _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@... http://mail.python.org/mailman/listinfo/cplusplus-sig |
|
|
Re: using windows api functionsThanks, Stefan. Sorry for my stupid question.
_______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@... http://mail.python.org/mailman/listinfo/cplusplus-sig |
| Free embeddable forum powered by Nabble | Forum Help |