Probleem met wcstombs

Status
Niet open voor verdere reacties.

Trotzki

Nieuwe gebruiker
Lid geworden
17 jul 2008
Berichten
2
Ik heb volgend probleem: als ik onderstaande c++ programmaatje laat lopen, krijg ik op vista de foutmelding dat het progje niet meer werkt eens er drie WM_COPYDATA's naar verstuurd zijn. Op XP sluit het prog gewoon af als er een 2de WM_COPYDATA naartoe gestuurd wordt.

Iemand een idee om dit op te lossen?

Code:
#include <windows.h>

LRESULT CALLBACK WindowProcedure(HWND hwnd, unsigned int message, WPARAM wParam, LPARAM lParam);

class MyWindow {
	public:
		MyWindow(WNDPROC winProc, char const * className, HINSTANCE hInst);
		void Register() {
			::RegisterClass(&_class);
		}
	private:
		WNDCLASS _class;
};

MyWindow::MyWindow(WNDPROC winProc, char const * className, HINSTANCE hInst) {
    _class.style         = 0;
	_class.lpfnWndProc   = winProc;
	_class.cbClsExtra    = 0;
	_class.cbWndExtra    = 0;
	_class.hInstance     = hInst;
	_class.hIcon         = 0;
	_class.hCursor       = 0;
	_class.hbrBackground = 0;
	_class.lpszMenuName  = 0;
	_class.lpszClassName = className;
}

class WindowCreator {
	public:
		WindowCreator() : _hwnd(0) {}
		WindowCreator(char const * caption, char const * className, HINSTANCE hInstance);
	protected:
		HWND _hwnd;
};

WindowCreator::WindowCreator(char const * caption, char const * className, HINSTANCE hInstance) {
	_hwnd = ::CreateWindow(
		className,
		caption,
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		0,
		0,
		hInstance,
		0);
}

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, char * cmdParam, int cmdShow) {
    char className[] = "MsnMsgrUIManager";
	MSG  msg;
	int  status;
	
	MyWindow myWindow(WindowProcedure, className, hInst);
	myWindow.Register();
	
	WindowCreator window("VirtualDJ Now Playing Handler", className, hInst);
	
	while(::GetMessage(&msg, 0, 0, 0) != 0) {
		::DispatchMessage(&msg);
	}
}


LRESULT CALLBACK WindowProcedure(HWND hwnd, unsigned int message, WPARAM wParam, LPARAM lParam) {
	switch(message) {
		case WM_COPYDATA:
            COPYDATASTRUCT *vdjData = (COPYDATASTRUCT *) lParam;
            if(vdjData->dwData == 0x547){
                 char* vdjString = new char;
                 wchar_t *vdjCode = (wchar_t *) vdjData->lpData;                                                         
                 wcstombs(vdjString,vdjCode,vdjData->cbData);
                 MessageBox(NULL, vdjString, "<Message title here>", MB_ICONSTOP|MB_SETFOREGROUND);
                 }
	}	
}

Bedankt al!
 
Ik heb even snel gekeken dus misschien helpt het onderstaande niet...

Misschien is het handig iets meer ruimte voor je multibyte-string te alloceren.
char* vdjString = new char;
wordt dan iets als:
char* vdjString = new char[ vdjData->cbData+1 ];

en vergeet het geheugen ook niet vrij te geven
als je er klaar mee bent met
delete [] vdjString;
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan