http://bbs.mjtd.com/thread-100917-1-1.html
我是使用mfc导入AutoCAD的类库来进行操作AutoCAD,需要打开一个文件,然后了利用再带的虚拟打印机打印出pdf文件。但是遇到很多中断,一直没能解决,希望得到各位的指导!先谢谢了!
1 CAcadApplication cadApp;2 CAcadDocument cadDoc;
3 CAcadDocuments cadDocs;
4
5 CLSID clsid;
6 HRESULT h;
7 CString str;
8 h = ::CLSIDFromProgID(L " AutoCAD.Application " ,& clsid);
9 if (FAILED(h))
10 {
11 MessageBox( " 计算机没有安装AUTOCAD软件。 " , " 警告 " , MB_OK| MB_ICONWARNING);
12 return ;
13 }
14 IUnknown *pUnknown= NULL;
15 h = ::GetActiveObject(clsid,NULL,&pUnknown); // 查找是否有AutoCad程序在运行
16 if (FAILED(h))
17 {
18 h = cadApp.CreateDispatch(clsid);
19 if (FAILED(h))
20 {
21 MessageBox( " AutoCAD程序打开失败,请检查你的程序是否安装好。 " , " 警告 " );
22 return ;
23 }
24 MessageBox( " 恭喜你,AutoCAD程序打开成功 " , " 成功提示 " );
25 }
26 else
27 {
28 try
29 {
30 h=pUnknown->QueryInterface(IID_IDispatch,(LPVOID *)&cadApp); // 获得已经打开的AutoCAD程序
31 if (FAILED(h))
32 throw (_T( " 没有取得IDispatchPtr " ));
33 pUnknown-> Release();
34 pUnknown= NULL;
35 }
36 catch (LPCTSTR lpErr)
37 {
38 MessageBox(lpErr, " 警告 " , MB_ICONWARNING| MB_OK);
39 return ;
40 }
41 MessageBox( " AutoCAD程序已经打开。 " , " 警告 " , MB_OKCANCEL);
42 }
43
44 cadDocs = cadApp.get_Documents(); // 获得文档集
45 CComVariant t( true ),f( false );
46 cadDocs.Open(LPCTSTR( " D:\\circle.dwg " ),f,t); // 打开文档
47 cadDoc = cadApp.get_ActiveDocument(); // 获得文档
48
49 CAcadLayouts cadLayouts = cadDoc.get_Layouts(); // 定义布局集
50 CAcadLayout cadLayout = cadLayouts.Add( " jpglayout " ); // 添加一个布局
51 cadLayout = cadDoc.get_ActiveLayout(); // 获得当前布局
52 CAcadPlotConfigurations cadConfigs; 定义打印配置集
53 VARIANT modelType ;
54 modelType.vt = VT_BOOL;
55 modelType.boolVal = true ;
56 CAcadPlotConfiguration cadConfig = cadConfigs.Add( " PublishToWeb JPG.pc3 " ,modelType); // 定义打印设置
57 cadConfig.put_PaperUnits( 1 ); // 设置打印纸张度量单位
58 cadConfig.put_PlotWithPlotStyles( true ); // 定义打印风格
59 cadConfig.put_StyleSheet( " acad.ctb " ); // 打印颜色
60 cadConfig.put_ConfigName( " PublishToWeb JPG.pc3 " ); // 打印机名字
61 cadConfig.put_UseStandardScale( true ); // 打印比例
62 cadConfig.put_StandardScale(cadLayout.get_StandardScale()); // 打印缩放比例
63 cadConfig.put_PlotType(cadLayout.get_PlotType());
64 cadConfig.put_CenterPlot( true );
65 CAcadPlot cadPlot = cadDoc.get_Plot();;
66 VARIANT config ;
67 config.vt = VT_LPSTR;
68 config.pcVal = " PublishToWeb JPG.pc3 " ;
6 9 cadPlot.PlotToFile( " C:\\test.jpg " ,config); // 输出目录
70
71 cadApp.Quit();
72 cadConfig.ReleaseDispatch();
73 cadConfigs.ReleaseDispatch();
74 cadDoc.ReleaseDispatch();
75 cadDocs.ReleaseDispatch();
从设置打印纸张度量单位就开始有中断,注释点后,后面每一句都有中断,还都一样...
SCODE sc = m_lpDispatch->Invoke(dwDispID, IID_NULL, 0 , wFlags, &dispparams, pvarResult, &excepInfo, &nArgErr);
都是这一句,“0x5B404A10 (mfc110d.dll) (autocadSave.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0xCCCCCCCC 时发生访问冲突。”
都快烦死了,因为问题显示不在我写的代码里面,而是后台代码,我是真心看不懂啊,向大家请教了!