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即启动。
[解决办法]
按这些步骤,一步一步去实现你想要的功能,就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中运行正常的
[解决办法]