using windows api functions

View: New views
5 Messages — Rating Filter:   Alert me  

using windows api functions

by blackmet blackmet :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello, 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.


_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@...
http://mail.python.org/mailman/listinfo/cplusplus-sig

Re: using windows api functions

by Stefan Seefeld :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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 ?

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 functions

by blackmet blackmet :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message



2009/11/7 Stefan Seefeld <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);

}


_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@...
http://mail.python.org/mailman/listinfo/cplusplus-sig

Re: using windows api functions

by Stefan Seefeld :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On 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 functions

by blackmet blackmet :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Thanks, Stefan.
Sorry for my stupid question.

_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@...
http://mail.python.org/mailman/listinfo/cplusplus-sig