Kann keine eigene PropertySheetPage erstellen!!!!
-
Hallo zusammen,
hab da ein riesiges Problem.
Ich will unter Windows98 eine eigene PropertySheetPage in meinem Druckertreiber erzeugen.
Allerdings kommen immer Laufzeitfehler!
Einmal "Rundll32" und das andere Mal "Msgsrv32"Hier mal der Code dazu
int NEAR PASCAL MeinePropSheetPage( HWND hWnd, HINSTANCE hInst, LPDM lpdmOut, LPSTR lpDevName, LPSTR lpPort, LPDM lpdmIn, LPSTR lpProfile, WORD wMode, DWORD dwReserved, LPFNADDPROPSHEETPAGE lpfnAdd, // could be NULL, if called from ExtDeviceMode LPARAM lParam) { int result, i; long lAddProcParam; LPFNADDPROPSHEETPAGE lpfnAddProc; PROPSHEETPAGE psp; PROPSHEETHEADER psh; HPROPSHEETPAGE hPage; PROPSHEETPROC psProc; LPTTYPSP lpTTYPSP; CREATEPROC CreateProc; LPBYTE lpDlgData; WORD wLoop; HINSTANCE hInstShell; _fmemset((LPSTR)&psp,0,sizeof(PROPSHEETPAGE)); if (!(lpTTYPSP = (LPTTYPSP)GlobalAlloc(GHND, sizeof(TTYPSP)))) { result = -1; goto EDM_exit; } lAddProcParam = lpfnAdd ? lParam : (long)lpTTYPSP; result = UniExtDeviceModePropSheet(hWnd,hInst,lpDevName,lpPort, dwReserved,lpfnAddProc,lAddProcParam); if (result != IDOK) goto EDM_exit; if (((hInstShell=LoadLibrary("COMMCTRL.DLL")) < HINSTANCE_ERROR) || (!(psProc=(PROPSHEETPROC)GetProcAddress(hInstShell, PROPERTYSHEETFUNCTION))) || (!(CreateProc=(CREATEPROC)GetProcAddress(hInstShell, CREATEPROPERTYSHEETPAGEFUNCTION)))) { goto EDM_exit; } psp.dwSize = sizeof (PROPSHEETPAGE); psp.hInstance = hInst; psp.pszTemplate = MAKEINTRESOURCE ("IDD_TESTDLG"); psp.lParam = lParam; psp.dwSize=sizeof(PROPSHEETPAGE); // Create dialog prop sheet interface hPage = CreateProc(&psp); if (lpfnAdd) { lpfnAdd(hPage, lParam); } else { char szTitle[MAX_STRING_LENGTH]; _fmemset((LPSTR)&psh,0,sizeof(PROPSHEETHEADER)); lstrcpy(szTitle, lpDevName); psh.dwFlags = PSH_PROPTITLE; psh.pszCaption = szTitle; psh.dwSize = sizeof(PROPSHEETHEADER); psh.hwndParent = hWnd; psh.nPages = sizeof (psp) / sizeof (PROPSHEETPAGE); psh.hInstance = hInst; result = psProc(&psh); } EDM_exit: if (lpTTYPSP) GlobalFree(lpTTYPSP); if (lpDlgData) GlobalFree(lpDlgData); if (hInstShell) FreeLibrary(hInstShell); return (result); }
Bin um jeden Tipp dankbar!!!!
-
Benutz doch mal den Debugger und schau genau nach, in welcher Zeile der Fehler auftritt.
btw:
Was soll dieses NEAR PASCAL vor der Funktion?
NEAR fällt eh weg (wir leben nicht mehr in der DOS-Ära), und PASCAL wird irgendeine Aufrufkonvention sein. Aber AFAIK ist PASCAL als Schlüsselwort veraltet.