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.


Anmelden zum Antworten