主题:dll中对话框的显示问题
我在dll中导出函数中使用了对话框,在exe中调用函数时,对话框却显示不出来(不通过dll导出时函数调用时,对话框可以显示出来),不知道什么原因。我把代码贴出来,大家帮忙看看吧:
#include <windows.h>
#include "resource.h"
#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif
BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);
BOOL WINAPI DllEntryPoint(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
return TRUE;
}
EXPORT BOOL __cdecl GetPageInfo(HWND hwnd, DEVMODE *lpDevMode, LPRECT lprtMargin)
{
PAGESETUPDLG psd;
if(!lpDevMode && !lprtMargin) return FALSE;
SecureZeroMemory(&psd,sizeof(psd));
psd.lStructSize = sizeof(psd);
psd.hwndOwner = hwnd;
psd.Flags = PSD_INHUNDREDTHSOFMILLIMETERS|PSD_RETURNDEFAULT;
if(PageSetupDlg(&psd))
{
if(psd.hDevMode)
{
CopyMemory(lpDevMode,GlobalLock(psd.hDevMode),sizeof(DEVMODE));
GlobalUnlock(psd.hDevMode);
GlobalFree(psd.hDevMode);
}
if(psd.hDevNames) GlobalFree(psd.hDevNames);
if(lprtMargin) *lprtMargin = psd.rtMargin;
return TRUE;
}
return FALSE;
}
EXPORT BOOL __cdecl SetPageInfo(HWND hwnd, DEVMODE *lpDevMode, LPRECT lprtMargin)
{
PAGESETUPDLG psd;
HRESULT hResult;
if(!lpDevMode && !lprtMargin) return FALSE;
SecureZeroMemory(&psd,sizeof(psd));
psd.lStructSize = sizeof(psd);
psd.hwndOwner = hwnd;
psd.hInstance = GetModuleHandle(NULL);
psd.lpPageSetupTemplateName = MAKEINTRESOURCE(IDD_DIALOG1);
psd.Flags = PSD_INHUNDREDTHSOFMILLIMETERS|PSD_ENABLEPAGESETUPTEMPLATE;
//psd.Flags = PSD_INHUNDREDTHSOFMILLIMETERS;
if(lprtMargin)
{
psd.Flags |= PSD_MARGINS;
psd.rtMargin = *lprtMargin;
}
if(lpDevMode)
{
psd.hDevMode = GlobalAlloc(GMEM_MOVEABLE,sizeof(DEVMODE));
if(!psd.hDevMode) return FALSE;
CopyMemory(GlobalLock(psd.hDevMode),lpDevMode,sizeof(DEVMODE));
GlobalUnlock(psd.hDevMode);
}
if(hResult = PageSetupDlg(&psd))
{
if(psd.hDevMode && lpDevMode)
{
CopyMemory(lpDevMode,GlobalLock(psd.hDevMode),sizeof(DEVMODE));
GlobalUnlock(psd.hDevMode);
}
if(lprtMargin) *lprtMargin = psd.rtMargin;
}
if(psd.hDevMode) GlobalFree(psd.hDevMode);
if(psd.hDevNames) GlobalFree(psd.hDevNames);
return hResult;
}
#include <windows.h>
#include "resource.h"
#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif
BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);
BOOL WINAPI DllEntryPoint(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
return TRUE;
}
EXPORT BOOL __cdecl GetPageInfo(HWND hwnd, DEVMODE *lpDevMode, LPRECT lprtMargin)
{
PAGESETUPDLG psd;
if(!lpDevMode && !lprtMargin) return FALSE;
SecureZeroMemory(&psd,sizeof(psd));
psd.lStructSize = sizeof(psd);
psd.hwndOwner = hwnd;
psd.Flags = PSD_INHUNDREDTHSOFMILLIMETERS|PSD_RETURNDEFAULT;
if(PageSetupDlg(&psd))
{
if(psd.hDevMode)
{
CopyMemory(lpDevMode,GlobalLock(psd.hDevMode),sizeof(DEVMODE));
GlobalUnlock(psd.hDevMode);
GlobalFree(psd.hDevMode);
}
if(psd.hDevNames) GlobalFree(psd.hDevNames);
if(lprtMargin) *lprtMargin = psd.rtMargin;
return TRUE;
}
return FALSE;
}
EXPORT BOOL __cdecl SetPageInfo(HWND hwnd, DEVMODE *lpDevMode, LPRECT lprtMargin)
{
PAGESETUPDLG psd;
HRESULT hResult;
if(!lpDevMode && !lprtMargin) return FALSE;
SecureZeroMemory(&psd,sizeof(psd));
psd.lStructSize = sizeof(psd);
psd.hwndOwner = hwnd;
psd.hInstance = GetModuleHandle(NULL);
psd.lpPageSetupTemplateName = MAKEINTRESOURCE(IDD_DIALOG1);
psd.Flags = PSD_INHUNDREDTHSOFMILLIMETERS|PSD_ENABLEPAGESETUPTEMPLATE;
//psd.Flags = PSD_INHUNDREDTHSOFMILLIMETERS;
if(lprtMargin)
{
psd.Flags |= PSD_MARGINS;
psd.rtMargin = *lprtMargin;
}
if(lpDevMode)
{
psd.hDevMode = GlobalAlloc(GMEM_MOVEABLE,sizeof(DEVMODE));
if(!psd.hDevMode) return FALSE;
CopyMemory(GlobalLock(psd.hDevMode),lpDevMode,sizeof(DEVMODE));
GlobalUnlock(psd.hDevMode);
}
if(hResult = PageSetupDlg(&psd))
{
if(psd.hDevMode && lpDevMode)
{
CopyMemory(lpDevMode,GlobalLock(psd.hDevMode),sizeof(DEVMODE));
GlobalUnlock(psd.hDevMode);
}
if(lprtMargin) *lprtMargin = psd.rtMargin;
}
if(psd.hDevMode) GlobalFree(psd.hDevMode);
if(psd.hDevNames) GlobalFree(psd.hDevNames);
return hResult;
}