请问这段代码错在哪里(OLECAD的)?(100分)

  • 主题发起人 主题发起人 徐辰仲
  • 开始时间 开始时间

徐辰仲

Unregistered / Unconfirmed
GUEST, unregistred user!
unit helloworld;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,comOBJ,ActiveX;//一定要加入ComObj,ActiveX两个单元

type
ThelloForm = class(TForm)
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Mpath:string;
AcadApp,AcadDoc,AcadMS:OleVariant; //定义Acad应用对象,当前图纸文件,模型空间
end;
var
helloForm: ThelloForm;

implementation

{$R *.dfm}

procedure ThelloForm.FormCreate(Sender: TObject);
begin
try
AcadApp:= GetActiveOleObject('AutoCad.Application'); //取得当前打开的autocad对象
except
AcadApp:=CreateOleObject('AutoCad.Application'); //没有创建新的autocad对象
end;
AcadDoc:=AcadApp.ActiveDocument; //当前图纸文件
AcadMS:=AcadDoc.ModelSpace; //模型空间
Mpath:=ExtractFilePath(Application.ExeName);//获取主文件路径
end;

procedure ThelloForm.Button1Click(Sender: TObject);
var
insPoint:Variant;
textHeight:integer;
textStr:string;
begin
insPoint:=VarArrayCreate([0,2],VT_R8); //定义插入点 (维数,类型)VT_8代表8字节的实型数
insPoint[0]:=2.0; //定义插入点X坐标
insPoint[1]:=4.0; //定义插入点Y坐标
insPoint[2]:=0.0; //定义插入点Z坐标
textHeight:=50;//文本高度
textStr:='Hello World!';//插入的文本字符
edit1.text:='Hello World!';
AcadApp.Visible:=True; //打开Autocad,使之可见
AcadMS.addText(textStr,varArrayRef(insPoint),textHeight);//将定义好的文本插入模型空间(文本,点指针,高度)
AcadDoc.SaveAS(Mpath+'hello.dwg'); //保存文件
end;
编译后会出现First chance exception at $7C81EB33. Exception class EOleSysError with message '操作无法使用'. Process hello.exe (2964)的错误,麻烦各位了!
 
你的程序代码是对的。
刚才我把你的代码运行了一遍。
如果你不是在开发环境,程序运行会很正确。
要在开发环境运行,你这样修改,屏蔽下面这几句:
// try
// AcadApp:= GetActiveOleObject('AutoCad.Application'); //取得当前打开的autocad对象
//except
AcadApp:=CreateOleObject('AutoCad.Application'); //没有创建新的autocad对象
//end;
修改成这样就好。
 
zywcd老哥,我试过了,你说得对,但屏蔽这几句的话会出现Variant错误的;我如果直接编译或编译后运行没有问题,但就是不能在开发环境运行(F9),运行就出错,不知道是个BUG还是其他什么原因
 
这个是正常的。这样的错误你只有在屏蔽阶段屏蔽掉,发布的时候再启用。
 
哦这样的话看来会对调试造成很大的麻烦俄,每次都要屏蔽掉,那将无法取得当前打开的autocad对象等步骤,使其按F9运行调试时可以正常的通过,如果屏蔽FormCreate整个一段还是会出错,无法进行调试,请问zywcd老哥能有什么方法避免这一点!
 
你最好直接引入这个库之后在开发。。。。要不麻烦。。
 
我是这样的。
{$DEFINE DEBUG}//打开调试开关》。。。
{$UNDEF DEBUG}//关闭调试开关。。。。

{$IFDEF DEBUG}
// 系统调试状态运行的代码

{$ELSE}
//调试状态不运行的代码
//把调试时会出错的,放在这里。
{$ENDIF}
 
谢谢各位解答,分已放出
 
后退
顶部