100分,大家看这个程序错在哪儿了??????
int ret,i;
DWORD Errno,retNum=0,buf[2000],len=sizeof(PRINTER_INFO_4);
PRINTER_INFO_2 pinfo2;
FORM_INFO_1 *pinfo1;
DWORD retValue,cbNeed,NeedSize;
TCHAR Text[128]="Letter",PrinterName[128];
HANDLE Printer;
LPDEVMODE lpmod;
DEVMODE devmod;
PRINTDLG pda;
PRINTER_DEFAULTS pDefault;
memset(&pda,0,sizeof(pda));
pda.lStructSize = sizeof(pda);
pda.Flags = PD_RETURNDEFAULT|PD_ALLPAGES | PD_USEDEVMODECOPIES | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE | PD_NOSELECTION;//PD_RETURNDEFAULT使之获得默认打印机的设置且不显示对话框
ret=::PrintDlg(&pda); // 获得缺省打印机设置
Errno=::GetLastError();
if(Errno==ERROR_SUCCESS){
if (pda.hDevMode !=NULL){
lpmod = (LPDEVMODE)GlobalLock(pda.hDevMode);
::MessageBox (NULL,(char *)lpmod->dmDeviceName ,"Name",MB_OK);
strcpy(PrinterName,(char *)lpmod->dmDeviceName );
::GlobalUnlock(pda.hDevMode);
}
}
else{
sprintf(Text,"Failed,errno=%d",Errno);
::MessageBox(NULL,Text,"Test",MB_OK);
}
memset(&pDefault,0,sizeof(pDefault));
memset(&devmod,0,sizeof(devmod));
memset(&pinfo2,0,sizeof(pinfo2));
pDefault.DesiredAccess =PRINTER_ALL_ACCESS;
ret=::OpenPrinter(PrinterName,&Printer,&pDefault);
Errno=::GetLastError();
if(Errno){
sprintf(Text,"Errno=%d",Errno );
::MessageBox (NULL,Text,"Failed",MB_OK);
}else
::MessageBox (NULL,"OpenPrinter Success!","OpenPrinter Sucess",MB_OK);
if(EnumForms(Printer,1,NULL,0,&cbNeed,&retValue))
{
if( GetLastError() != ERROR_INSUFFICIENT_BUFFER )
{
ClosePrinter( Printer );
MessageBox("Failed");
return;
}
}
NeedSize=cbNeed;
pinfo1=(FORM_INFO_1 *)malloc( NeedSize );
// 只要加入下面两个语句就可以成功,为什么?
//sprintf(Text,"Need=%d||retValue=%d",cbNeed,retValue );
//::MessageBox (NULL,Text,"Success",MB_OK);
EnumForms(Printer,1,(LPBYTE)pinfo1,NeedSize,&cbNeed,&retValue);
Errno=::GetLastError();
if(Errno){
sprintf(Text,"Errno=%d",Errno );
::MessageBox (NULL,Text,"Failed",MB_OK);
}else
{
MessageBox ("EnumForm Success!","Sucess",MB_OK);
for( i=0;i<(int)retValue;i++)
{
ToUpper(pinfo1[i].pName);
if(!strcmp("TEST",pinfo1[i].pName))
{
sprintf(Text,"index=%d",i+1);
MessageBox(pinfo1[i].pName,Text);
}
}
}
free(pinfo1);
ClosePrinter(Printer);
相关推荐
【信息科学与工程学】计算机科学与自动化-——第十五篇云计算 11 算法篇
在百万级虚拟机、百万级租户的超大规模云环境中,核心算法挑战包括:挑战维度具体问题算法需求技术复杂度规模性百万级对象并发管理分布式算法、分区算法极高(NP-hard问题)多租户租户间隔离与资源共享公平性算法、隔离算法高(多目标优化)动态性资源需求实时变化自适应算法、在线算法高(实时决策)异构性硬件/负载/需求差异分类算法、匹配算法中高(多维度优化)经济性资源利用率与成本平衡优化算法、博弈论算法高(多目标博弈)以下是按领域分类的详细算法列表:算法名称数学建模表达核心思想时间复杂度适用场景推理步骤首次适
【信息科学与工程学】【运营科学】第二篇 C4信息与通信网络运营 (C4) ——数据中心网络运营04
典型值:λ1∈[−0.02,−0.01], λ2∈[−0.01,0], η1,η3∈[0.1,0.3], η2,η4∈[0.05,0.15]参数:δ1∈[−0.8,−0.3], δ2∈[−0.5,−0.2], δ3∈[−0.4,−0.1], δ4∈[−0.6,−0.2]参数:φ1∈[0.1,0.3], φ2∈[−0.2,−0.05], φ3∈[−0.1,0.1], φ4∈[−0.3,−0.1]参数:α∈[0.3,0.6], β∈[0.2,0.4], γ∈[0.01,0.03]
【信息科学与工程学】【运营科学】第二篇 C4信息与通信网络运营 (C4) ——数据中心网络运营06
13 | 司法诉讼 | 原告律师 | 争取和解优势 | 证据披露的序贯博弈 | 策略性证据释放 | 持有证据集E = {强证据e_s, 中证据e_m, 弱证据e_w}。设公众原有认知人格向量为 Pold=(p1,p2,...,pk), 其中p_i为负面特质(如“不敬业”)。危机后, 通过行为序列 {At}和宣传, 将公众认知向新向量 Pnew引导, 使得在关键维度上, Pnew与 Pold的余弦相似度降低, 并与一个正面的、可接受的“原型”(如“浪子回头”、“慈父”)对齐。
蒙古国寺庙shp信息点wgs84.zip
蒙古国寺庙shp信息点wgs84.zip
【电力系统状态估计与PMU(相量测量单元)】使用WLS和PMU来估计系统的电压幅值和角度还将这些值与使用Newton-Raphson方法获得的状态进行比较(Matlab代码实现)
内容概要:本文系统阐述了基于加权最小二乘法(WLS)融合相量测量单元(PMU)量测数据进行电力系统状态估计的理论与实现方法,重点研究了如何利用PMU提供的高精度、高同步性的电压和电流相量信息,构建精确的量测方程,并将其集成到传统的WLS状态估计算法中,以实现对系统节点电压幅值和相角的高精度估计。文中详细描述了WLS-PMU联合估计模型的数学推导过程,包括状态变量定义、量测函数建立、雅可比矩阵计算及迭代求解流程,并通过Matlab编程实现了该算法。研究进一步将WLS-PMU的估计结果与基于传统SCADA量测和牛顿-拉夫森(Newton-Raphson)潮流计算的状态估计结果进行对比分析,通过仿真验证了PMU的引入能显著提升状态估计的精度、收敛速度和抗噪声能力,为现代电力系统的高精度实时监控与安全分析提供了有效的技术手段。; 适合人群:具备电力系统分析、现代控制理论基础,熟悉状态估计、潮流计算原理,并能熟练运用Matlab进行仿真实验的电气工程专业高年级本科生、研究生及从事电力系统自动化、智能电网相关领域的科研人员和技术工程师。; 使用场景及目标:① 掌握融合PMU量测的WLS状态估计模型的完整构建方法与理论依据;② 学习并掌握在Matlab环境中实现WLS算法及Newton-Raphson潮流计算的具体编程技巧与仿真流程;③ 通过定量对比分析,深入理解PMU在提升电网可观测性、增强状态估计鲁棒性方面的核心价值与技术优势。; 阅读建议:建议读者在阅读时紧密结合所提供的Matlab代码,逐行分析算法实现细节,特别是PMU量测方程的处理、权重矩阵的设定以及WLS迭代过程的逻辑。鼓励通过修改系统参数(如网络拓扑、PMU配置数量与位置)、引入不同程度的量测噪声等方式进行扩展性仿真实验,以直观感受不同因素对估计性能的影响,从而深化对状态估计理论精髓的理解。


