首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

CAD运作dll文件

2012-12-22 
CAD运行dll文件我有个CAD的代码,我将其做成了dll格式,但是不知道CAD怎么工作啊?求求高手指点指点谢谢!!!![

CAD运行dll文件
我有个CAD的代码,我将其做成了dll格式,但是不知道CAD怎么工作啊?求求高手指点指点
    


 谢谢!!!!
[解决办法]
无代码,无真相
[解决办法]
你想说啥?

在你的CAD VBA里面把这个dll当做reference加进去然后调用里面的函数就好了
[解决办法]
Public Sub DTEXCEL()
Dim ACAD As Object
Dim STRNAME, BCNAME As String
Dim Header As Boolean
Dim Excel As Excel.Application '声明Excel应用程序对象变量
Dim ExcelSheet As Object '定义Excel工作表
'创建Excel应用程序实例
On Error Resume Next '激活Excel应用程序
Set Excel = GetObject(, "Excel.Application") 'Excel应用程序已经运行,则获得它的对象实例
If Err <> 0 Then '如果Excel应用程序未运行
   Set Excel = CreateObject("Excel.Application") '创建Excel应用程序实例
End If
Set ExcelWorkbook = Excel.Workbooks.Add '创建一个新工作簿
Set ExcelSheet = Excel.ActiveSheet '确保Sheet1工作表为当前工作表
Dim objExl As Excel.Application
Range("A1:A900").Select
Selection.NumberFormatLocal = "@" '设置格式为文本
Selection.HorizontalAlignment = xlleft '选定单元格左对齐
STRNAME = ThisDrawing.Name '当前打开的文件名
BCNAME = "T" & Mid(STRNAME, 1, InStrRev(STRNAME, ".")) + "XLS" '截取点前的文件名组合为电子表名
MsgBox "提取的数据将保存在:D:" & BCNAME & "中,按确定继续...", , "信息技术管理部提示"
RowNum = 3 '明细起始行
'扫描模型空间,查找明细表引用块行
For Each blkElem In ThisDrawing.ModelSpace
  With blkElem
  '当一个块行被找到后,检查它是否有属性
  If StrComp(.EntityName, "AcDbBlockReference", 1) = 0 Then '如果有属性
    RowNum = RowNum + 1
    If .HasAttributes Then
    Array1 = .GetAttributes
    '提取普通模式块的属性引用中的属性
     For Count = LBound(Array1) To UBound(Array1)
         If StrComp(Array1(Count).EntityName, "AcDbAttribute", 1) = 0 Then
            tqtj = Array1(Count).TagString
               '符合下一条件的块才提取值,控制明细规范以外的块不提取
              If tqtj = "线号" Or tqtj = "位置" Or tqtj = "型号" Or tqtj = "规格" Or tqtj = "端子" Or tqtj = "附件" Or tqtj = "加长度" Then
                ExcelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TextString
              End If
         End If
        ''''''
     Next Count
        Header = Ture
      End If
   End If
  End With
Next blkElem
'将新创建的工作簿保存为Excel文件
'自动填写表头行标题字段
ExcelSheet.Range("A1").Value = "图纸文件:" + BCNAME


ExcelSheet.Range("A2").Value = "线号"
ExcelSheet.Range("B2").Value = "位置"
ExcelSheet.Range("C2").Value = "型号"
ExcelSheet.Range("D2").Value = "规格"
ExcelSheet.Range("E2").Value = "端子"
ExcelSheet.Range("F2").Value = "附件"
ExcelSheet.Range("G2").Value = "加长度"

'''''''''''
'对填入当前表的内容,对明细栏提取的值进行排序
'从A列3行至I列900行排序保证1至2行标题栏不受影响
'Excel.ExcelSheet.Range("A3:I900").Sort _
'Key1:=Excel.ExcelSheet.Columns("A")
    ExcelSheet.Range("A3:I900").Select
    ExcelSheet.Sort.SortFields.Clear
    ExcelSheet.Sort.SortFields.Add key:=Range("A3"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ExcelSheet.Sort
        .SetRange Range("A3:GI900")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
'调整列宽
ExcelSheet.Columns("A:A").EntireColumn.AutoFit
ExcelSheet.Columns("B:B").EntireColumn.AutoFit
ExcelSheet.Columns("C:C").EntireColumn.AutoFit
ExcelSheet.Columns("D:D").EntireColumn.AutoFit
ExcelSheet.Columns("E:E").EntireColumn.AutoFit
ExcelSheet.Columns("F:F").EntireColumn.AutoFit
ExcelSheet.Columns("G:G").EntireColumn.AutoFit
ExcelSheet.Range("A1").Select
'ExcelWorkbook.SaveAs "d:" + BCNAME '存盘
'显示Excel工作表中的结果
'Excel.Visible = True
'MsgBox "按确定键将关闭Excel的运行!", , "信息技术管理部提示"
'保存传过来的数据
    ChDir "D:"
    ExcelWorkbook.SaveAs FileName:="D:" & BCNAME, FileFormat:=xlExcel8, _
        Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
        CreateBackup:=False
'ExcelWorkbook.Save
'关闭Excel应用程序
Excel.Application.Quit
'删除Excel应用程序实例
Set Excel = Nothing
End Sub
[解决办法]
感谢大家抽空帮我看这个代码的问题,我真的不知道将这个代码封装成DLL格式后怎么才能运行啊,我想用CAD来调用这个代码,我的CAD自定义了一个菜单,菜单指定的宏名称为:m_excel


谢谢大家!!
  谢谢!!
[解决办法]
谁能帮我处理一下CAD运行DLL文件的方法啊?
[解决办法]
1:把代码封装成DLL,并把该DLL复制到CAD所在的路径的Support路径下。
2:编写.mnu文件,指定加载的菜单或命令。(Support路径下)
3:修改acad20XXdoc.lsp.lsp文件,其中20XX根据CAD版本不同而异(Support路径下),打开CAD即启动。
[解决办法]

引用:
1:把代码封装成DLL,并把该DLL复制到CAD所在的路径的Support路径下。
2:编写.mnu文件,指定加载的菜单或命令。(Support路径下)
3:修改acad20XXdoc.lsp.lsp文件,其中20XX根据CAD版本不同而异(Support路径下),打开CAD即启动。

漏了一步:编写DVB程序,在DVB中createobject,并调用DLL
[解决办法]
能不能说详细的啊,我弄了几个月了,总是CAD提示错误,CAD里面怎么设置啊?CAD里面的代码怎么写啊?
 求求各位师傅!!
  我的QQ224373054
[解决办法]
首先,你要把函数写到DLL里,所以,你需要先生成这个DLL。
第二,你需要调用这个DLL代码,所以需要有个dvb的程序。
第三,你需要通过菜单命令,来进行运行。所以你需要需该mnu文件。
第四,你需要打开的每个dwg文件都可以调用该功能,所以你需要修改lsp文件。



按这些步骤,一步一步去实现你想要的功能,就OK了。
[解决办法]
步骤知道,但是代码错误啊,不知道怎么解决
[解决办法]
你做到哪一步了,你这些代码本来不用添加在cad里面也能测试吧

这个代码本来就不是写在dll里面的,你扔到cad的vba里面直接做吧,记得添加excel引用

你代码里面有这样的,说明不是放在dll里面而是直接在vba下面运行的
For Each blkElem In ThisDrawing.ModelSpace

看看书,踏踏实实学吧



[解决办法]
我话了钱买的代码,公司不会给我报销的,我想用DLL格式来保护啊,真的希望有人帮我啊
[解决办法]
这个和你学习没有矛盾啊
1.你的这个代码还是可以在vba下直接测试,然后才能确定你代码运行成功。你没有在自己的cad vba下测试成功的话怎么那么草率就给了钱买了代码呢
2.你要知道你封装后 CAD需要给你什么信息,这些信息就是你作为public公开的部分

这些都是知识需要你阅读学习的,当然你也要跟公司谈,为什么要因为单位的事情私下自己掏钱。你要代码当然要单位掏钱了....


[解决办法]
在VBA状态下的运行很正常的啊,就是封装成DLL后CAD就不能运行了



就是CAD调用有问题,不知道什么原因
[解决办法]
'ChangeColor为VB中新创建ActiveX Dll文件后类的名称
   '默认为Class1

   Dim ChgCor As New ChangeColor

   Public Sub TestChangeColor_Dll()
     ChgCor.ChangeColor
   End Sub

这个代码是在CAD的VBA里面设置的,不能工作
[解决办法]
你没看到我写的么,你的dll代码里面有thisdrawing,你封装到dll里面,这个变量初始化了没有

你什么都不传进去,你的dll怎么知道在操作什么。然后你还怪cad调用有问题,cad冤枉死了都。

你要不然就买个完整的dll,要不然就有能力作变换。我说得都是最基本的与cad无关的封装问题,踏实学习重要啊
[解决办法]
写了一大堆服务器无法响应...
[解决办法]
对了,你还要学会debug阿

你现运行你的dll 工程,在里面设置断点,然后运行你的调用vba,这样你就可以debug进去看看哪里出错了。
最不济你也会在dll里面添加一些msgbox来看看运行到什么哪里吧 ,你的dll也不抓错误,on error 没有的话怎么把错误传出来给你看。
[解决办法]
以上这个代码在CAD的VBA中提示错误啊,我昨晚搞了很久没搞定,但是代码不封装的话,直接在CAD中运行正常的
[解决办法]

引用:
'ChangeColor为VB中新创建ActiveX Dll文件后类的名称
   '默认为Class1

   Dim ChgCor As New ChangeColor

   Public Sub TestChangeColor_Dll()
     ChgCor.ChangeColor
   End Sub

这个代码是在CAD的VBA里面设置的,不能工作

你在DLL入口处设置一个断点,并且运行DLL,然后通过上面的方法调用。看能进入DLL代码不。如果能够正常工作,就是DLL引用的问题。注册之,并最好改成CreateObject的方法来调用。
[解决办法]
这个社区不是学习和交流的地方啊!!!伤心!!

热点排行