Mein Gott Walter, da habe ich mich schon wieder vertan.
Datei : CustomMsg.ch
Code: Alles auswählen
#define MSG_LINE_CALLBACK WM_USER + 100
#define MSG_END_LOOP WM_USER + 101
#define MSG_SAY_HELLO WM_USER + 102
Code: Alles auswählen
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <xpppar.h>
#include <xppcon.h>
//-------------------------------------------------------------------------------------------------------------------------
#pragma comment(lib,"kernel32")
#pragma comment(lib,"user32")
#pragma comment(lib,"gdi32")
//-------------------------------------------------------------------------------------------------------------------------
#include "CustomMsg.ch"
#define MYHEAPFLAGS (HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY)
//-------------------------------------------------------------------------------------------------------------------------
static char szWndClassName[] = "ID_179070F5A3F843B396E91C41CEEAB84C" ; // UUID
HWND _hWnd_ = 0;
//-------------------------------------------------------------------------------------------------------------------------
static VOID FAR PASCAL lineCallbackFunc(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
static LRESULT CALLBACK _WndProc_(HWND,UINT, WPARAM, LPARAM);
//-------------------------------------------------------------------------------------------------------------------------
XPPRET XPPENTRY APPINSTANCE( XppParamList pl){ _retnl( pl,(LONG) GetModuleHandle(NULL)); }
//-------------------------------------------------------------------------------------------------------------------------
XPPRET XPPENTRY MYLOOP_QUIT( XppParamList pl)
{
if( _hWnd_ != NULL ) SendMessage( _hWnd_ , MSG_END_LOOP , 0 , 0 );
_ret(pl);
}
//-------------------------------------------------------------------------------------------------------------------------
XPPRET XPPENTRY MYLOOP( XppParamList pl)
{
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof (wndclass) ;
wndclass.style = CS_HREDRAW;
wndclass.lpfnWndProc = _WndProc_ ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = (HINSTANCE) GetModuleHandle(NULL);
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szWndClassName;
wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
RegisterClassEx (&wndclass);
_hWnd_ = CreateWindow(szWndClassName,"", WS_DISABLED , 0,0,1,1,NULL,NULL,(HINSTANCE) GetModuleHandle(NULL),NULL);
while(GetMessage (&msg, NULL, 0, 0)) DispatchMessage (&msg) ;
UnregisterClass(szWndClassName,(HINSTANCE) GetModuleHandle(NULL) );
_hWnd_ = 0;
_ret(pl);
}
//-------------------------------------------------------------------------------------------------------------------------
XPPRET XPPENTRY LP_MYCALLBACK( XppParamList pl){ _retnl(pl, (LONG) lineCallbackFunc ); }
//-------------------------------------------------------------------------------------------------------------------------
static VOID FAR PASCAL lineCallbackFunc(DWORD dw0,DWORD dw1,DWORD dw2,DWORD dw3,DWORD dw4,DWORD dw5,DWORD dw6,DWORD dw7,DWORD dw8,DWORD dw9,DWORD dw10)
{
if( _hWnd_ != NULL )
{
DWORD szData[11];
szData[0] = dw0; szData[1] = dw1; szData[2] = dw2; szData[3] = dw3; szData[4] = dw4; szData[5] = dw5;szData[6] = dw6;szData[7] = dw7;szData[8] = dw8;szData[9] = dw9;szData[10] = dw10;
SendMessage( _hWnd_ , MSG_LINE_CALLBACK , 0 , (LPARAM)((void*) &szData) );
}
}
//-------------------------------------------------------------------------------------------------------------------------
static LRESULT CALLBACK _WndProc_(HWND hWnd ,UINT nMsg ,WPARAM wp , LPARAM lp )
{
switch( nMsg )
{
case MSG_LINE_CALLBACK :
{
DWORD * pData = (DWORD *)((void *) lp);
ContainerHandle conr = _conNew( NULLCONTAINER );
ContainerHandle con0 = _conPutNL( NULLCONTAINER , (LONG) pData[0]);
ContainerHandle con1 = _conPutNL( NULLCONTAINER , (LONG) pData[1]);
ContainerHandle con2 = _conPutNL( NULLCONTAINER , (LONG) pData[2]);
ContainerHandle con3 = _conPutNL( NULLCONTAINER , (LONG) pData[3]);
ContainerHandle con4 = _conPutNL( NULLCONTAINER , (LONG) pData[4]);
ContainerHandle con5 = _conPutNL( NULLCONTAINER , (LONG) pData[5]);
ContainerHandle con6 = _conPutNL( NULLCONTAINER , (LONG) pData[6]);
ContainerHandle con7 = _conPutNL( NULLCONTAINER , (LONG) pData[7]);
ContainerHandle con8 = _conPutNL( NULLCONTAINER , (LONG) pData[8]);
ContainerHandle con9 = _conPutNL( NULLCONTAINER , (LONG) pData[9])
ContainerHandle con10 = _conPutNL( NULLCONTAINER , (LONG) pData[10]);
_conCall( conr , "MyCall11p" , 11, con0, con1, con2, con3, con4, con5, con6, con7, con8, con9 , con10);
_conRelease(conr);_conRelease(con0);_conRelease(con1);_conRelease(con2);
_conRelease(con3);_conRelease(con4);_conRelease(con5);_conRelease(con6);
_conRelease(con7);_conRelease(con8);_conRelease(con9);_conRelease(con10);
return 0;
}
case MSG_END_LOOP:{ _hWnd_ = 0; DestroyWindow(hWnd);PostQuitMessage(0);return 0;}
case WM_DESTROY:{PostQuitMessage(0);return 0;}
}
return DefWindowProc(hWnd,nMsg,wp,lp);
}
//-------------------------------------------------------------------------------------------------------------------------
XPPRET XPPENTRY PTR_TO_STR(XppParamList pl)
{
ContainerHandle hString;
LPSTR p = (LPSTR) _parnl(pl,1);
hString = _conPutC(NULLCONTAINER, p);
if (hString != NULLCONTAINER)
{
_conReturn(pl, hString);
_conRelease(hString);
}
else
{
* Fehler aufgetreten: gib NIL zurück. */
conReturn(pl, NULLCONTAINER);
}
return;
}
Thomas