求教高手报表问题啊,救命啦
大家帮我看看这段程序有没有问题啊,为什么2000下正常,XP下就出会报错:Access Violation at address 400C10B4 in module 'vcl60.bpl' Read of address 3037364C
知道的朋友请告诉我怎么处理啊,拜托了
void __fastcall TgPublic::SetPageSize(int w, int h)
{
char Device[CCHDEVICENAME];
char Driver[MAX_PATH];
char Port[32];
THandle hDMode;
PDevMode pDMode;
TPrinter *Prn = Printer();
try
{
Prn->GetPrinter(Device,Driver,Port,hDMode);
if (hDMode!=NULL)
{
pDMode=(PDevMode)GlobalLock((HGLOBAL &)hDMode);
if (pDMode!=NULL)
{
//pDMode->dmFields=(pDMode->dmFields)¦(DM_PAPERSIZE);
pDMode->dmFields=pDMode->dmFields | DM_PAPERSIZE | DM_PAPERLENGTH | DM_PAPERWIDTH | DM_COLLATE;
pDMode->dmPaperSize= 0;
pDMode->dmPaperLength =h; //高 *0.1mm
pDMode->dmPaperWidth = w; //宽 *0.1mm
pDMode->dmCollate = DMCOLLATE_TRUE;
}
ResetDC(Prn->Handle,pDMode); //出错 jww
GlobalUnlock((HGLOBAL &)hDMode);
Prn->SetPrinter(Device, Driver, Port, hDMode);
}
}
__finally
{
}
}
问题点数:100、回复次数:12Top
1 楼robbyzi(红客robby) (★世界真大★)回复于 2004-12-02 13:04:20 得分 0
这是技术问题啊。。
楼主自己转到技术区去吧。。Top
2 楼h98458(零点起飞)回复于 2004-12-02 14:23:34 得分 0
void TFrmMain::SetPaperSize(int w,int h) // ÉèÖÃȱʡ´òÓ¡»úÖ½ÕÅ´óС w*h(*0.1mm)
{
char Device[CCHDEVICENAME];
char Driver[MAX_PATH];
char Port[32];
THandle hDMode;
PDevMode pDMode;
TPrinter *Prn = Printer();
Prn->GetPrinter(Device,Driver,Port,hDMode);
if (hDMode!=NULL)
{
pDMode=(PDevMode)GlobalLock((HGLOBAL &)hDMode);
if (pDMode!=NULL)
{
pDMode->dmPaperSize= 256;
pDMode->dmFields=pDMode->dmFields | DM_PAPERSIZE;
pDMode->dmPaperLength =h; //¸ß *0.1mm
pDMode->dmFields =pDMode->dmFields| DM_PAPERLENGTH;
pDMode->dmPaperWidth = w; //¿í *0.1mm
pDMode->dmFields =pDMode->dmFields| DM_PAPERWIDTH;
}
ResetDC(Prn->Handle,pDMode);
GlobalUnlock((HGLOBAL &)hDMode);
}
}Top
3 楼h98458(零点起飞)回复于 2004-12-02 14:27:27 得分 20
我编译这段没错,那乱码你不要管它,是程序的中文说明Top
4 楼jw909(姬维)回复于 2004-12-02 14:44:43 得分 0
还是出错啊,不是编译,要看运行。执行到ResetDC(Prn->Handle,pDMode)的时候报Access Violation at address 400C10B4 in module 'vcl60.bpl' Read of address 3037364C错。Top
5 楼ch_builder(春辉)回复于 2004-12-05 18:03:25 得分 20
这是典型的地址冲突
关于这方面的内容你可以问一下CKER,他在这方面水平很高的Top
6 楼lihongxing2002(潇洒)回复于 2004-12-06 09:13:26 得分 10
不错,老大的水平非常高Top
7 楼lidawen(Darwin)回复于 2004-12-06 10:17:01 得分 10
upTop
8 楼jw909(姬维)回复于 2004-12-06 13:36:51 得分 0
谢谢ch_builder(春辉),可我怎么找他呢?Top
9 楼jw909(姬维)回复于 2004-12-09 14:42:51 得分 0
天啊,怎么没人来拯救我啊
解决不掉了Top
10 楼robbyzi(红客robby) (★世界真大★)回复于 2004-12-10 12:15:49 得分 20
上他的BLOG留下言吧..
http://blog.csdn.net/ckerTop
11 楼cker(〖烟波浩淼三千里、人鬼殊途五百年〗)回复于 2004-12-21 22:13:49 得分 20
1。我这里无法重现你描述的AV。
2.为什么要ResetDC,多余了吧,SetPrinter才是用来修改打印机模式的。
Top
12 楼jw909(姬维)回复于 2005-01-24 11:24:33 得分 0
我的操作系统是XP,跟这个有没有关系?
可以不用ResetDC?Top




