为了以后有疑问的人解决问题。我把调用的代码贴上。
'==========如下代码是在VBA中写的=====================
Dim thisdwg As Object '定义一个对象变量 Set thisdwg = ThisDrawing '将ThisDrawing对象赋给它 Set oMyApp = ThisDrawing.Application.GetInterfaceObject("Cadstar_DESK.desk")
vReturn = oMyApp.C_DESK_F1(thisdwg) '传递参数
'===============如下代码是在VB中定义的========================
'首先在一个VB的模块中定义一个公共变量,便于调用
Public thisdwg1 As Object
'然后在类模块中定义函数
Public Function C_DESK_F1(thisdwg As Object) Set thisdwg1 = thisdwg frm1.Show vbModal End Function
然后在整个VB中都可以调用THISDWG1代替ACTIVEDOCUMENT了:)
其实楼主的方法是逆向的方法。并不是在程序的运行时检测,那个cad是运行的,而是在cad中使用命令时,将当前图形的thisdrawing作为一个参数传入dll文件的函数中,这样程序就知道是那个cad了。
这种方法有一点需要注意的,就是thisdrawing的转化问题。当然这种问题在你同时处理不同的图形时才会表现出来。
我一般在子程序的开始会加入一个函数
Public Function ChangeThisdrawing() Set Thisdrawing = Acadapp.ActiveDocument End Function
这样程序运行时,处理的总是当前激活的文档。