QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
5天前
查看: 2425|回复: 5
收起左侧

[求助] 哪路大神有 DLL创建solidworks的菜单 的程序呀

[复制链接]
发表于 2014-5-17 21:50:44 | 显示全部楼层 |阅读模式 来自: 中国浙江杭州

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
用vb6.0编辑DLL插件 然后可以在solidworks里添加插件显示菜单, 如果有的话指导下 谢谢谢
发表于 2014-5-22 10:29:31 | 显示全部楼层 来自: 中国广东中山
V97_1五軸加工概論.pdf
发表于 2014-5-22 21:20:49 | 显示全部楼层 来自: 中国广东深圳
是什么东西
发表于 2014-5-25 11:37:42 | 显示全部楼层 来自: 中国广东佛山
本帖最后由 yjyeming 于 2014-5-25 11:44 编辑 3 p: q8 g0 a) b3 C8 j# g; N+ E
7 D8 B" A* o) b% t$ _
VB封装DLL实例讲解(一)' ]& z; V: x  P' O  F) ]
5 T; R# R. {% ?9 x0 [# V
- W$ @) p& t( N' F: j
一、        DLL基本概念1 ~1 K5 A/ g$ ~/ T9 I
(一)概念( `! L0 x) [6 P# g* R
DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。6 [- R0 C( L6 L
(二)主要优点:* [* {3 s; R! K+ ~
1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;6 D; `; D) C: f7 O
2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;" x) X/ Z+ X( U: a
3、从ACCESS角度而言,还可以更好的确保核心代码的安全。) \  `& B* G0 X% k% Z

5 O/ a, k9 e- e* P/ x二、        用VB封装VBA代码,构建自定义的DLL动态链接库+ O% T$ A0 @! c/ ^% A8 u
(一)ACCESS中实例代码
( x2 w8 h4 |0 P; n下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
% G0 B4 s: `6 \* |9 g4 c6 Y我将就这个实例演示如何将该实例VBA代码封装成为DLL。3 A4 s" ?9 F7 J7 Y

& p( Y1 ~9 g( t3 a1 ]% v
/ H4 @" V7 M( p5 X# f
, x$ Q" `/ V3 N$ t% x, H 按钮单击事件代码如下:
' A9 k5 J9 i0 g5 I0 S7 X. V' hPrivate Sub CmdFindnumber_Click()
) Z5 f; x: X; D6 x  Dim strM   As String     '初始字符串$ V) g4 {, q7 t1 q/ N2 e
  Dim strOut  As String     '输出字符串变量" ^: c, V. A  \9 l6 [1 O9 _
  Dim I
) ?* x; F: Y, U& K8 y  
/ q: F1 Y. b6 U& O3 _  strM = Me.Text1, W2 x9 B0 h' p" j, P
'从第一个字符向最后一个字符循环,以提取每个字符
0 Q: n( ~4 |6 a  For I = 1 To Len(strM)
2 J; c+ m- o2 w+ o4 {) s      '判断是否为0到9字符,是则赋值输出# T; @% u& O6 g
      If Mid(strM, I, 1) Like "[0-9]" Then) _# H0 X; }' Z% g& i
         strOut = strOut & Mid(strM, I, 1)
' d  C, F5 |/ g      End If
$ ~5 E$ h- z! t# M  Next I7 M* ^- C0 C% @8 w# w
  '用MsgBox函数进行输出测试
4 w7 f. B8 ^. S  L  MsgBox strOut5 h6 c$ X1 K+ b8 y( y
End Sub
  O/ F7 l( Y+ C; t/ x$ V    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)! v+ G% k% b4 h& d! ]- ^

' k! o+ @4 C: Q/ W8 E, A(二)VB封装实例中VBA代码
( D; l  n: H1 V8 O4 a/ e步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口
9 F1 K# }! _. f8 ^( `% N' \% R/ }6 H) W% o
, M1 L% z7 u/ W- y
% L* ^  R  J% A. X
- o3 B  m, F# p5 N3 y- |

" Y1 W' I3 L  u! ^, t5 N4 V& _步骤二:修改工程名,这即生成的DLL库名: j+ y5 x! D$ d, p
0 b  v5 f1 O" P# F

/ \, V% L) `' R4 B8 v! @' \: L" O/ G

1 O5 H1 K5 p' A2 V) q2 N) i5 F
" }0 g% n7 |9 `& ^' g, d/ S; b步骤三:修改类名
5 _' L8 G* a4 ^" A' _4 `/ I' Q8 j5 L( o0 e* P7 W. T
3 q% j3 i  h9 k5 ~2 {( P9 Z& Y

- s& ~5 a# ?$ ^, V- I$ c" Q
+ c/ |/ @6 j* g步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口
& `6 A8 g$ U: W# e# v! f( ^8 P" u0 g2 O) D

! i$ \. X7 k: B5 }6 t* M8 r* d& j& D- v; z1 U+ X+ p6 V
代码如下
/ B- G9 s. N: g/ W0 ~: ^'将这前的ACCESS代码改成一个公用函数+ L, N" W7 C/ }: A
'输入:strPutString 字符串变量,需分离数字的字符串
' O8 G5 j# N8 q'输出: fFindNumber字符串变量,得到的数字字符
5 _9 V! F8 A/ W& }2 dPublic Function fFindNumber(strPutString As String) As String2 o% U( H" Q5 T  Z4 G
   Dim strOut  As String     '输出字符串变量$ e" M0 \2 c" o- s1 p
   Dim I
. H1 n$ R% f' f1 Y, O6 g0 H  
) O8 A3 y, C: @   '从第一个字符向最后一个字符循环,以提取每个字符
4 e. p' v& Y$ F( w9 E   For I = 1 To Len(strPutString)2 S6 N: P$ {' x5 \8 S1 c( u5 B
      '判断是否为0到9字符,是则赋值输出! }5 s) T" }1 n) ?8 h6 o9 E1 C$ J# T
       If Mid(strPutString, I, 1) Like "[0-9]" Then
; Z4 J& A9 D# p% I9 |1 }5 m         strOut = strOut & Mid(strPutString, I, 1)$ {- Y9 K6 I) `& ~6 y
       End If
5 C) w2 Y' K" x- O: d9 |   Next I+ N) i6 n( k/ m( P
   '数字输出1 I1 a" [8 s) ]6 h/ g. `
   fFindNumber = strOut$ z+ w: f" S. @( y' @
End Function
0 B9 v* N+ f- i5 e' n- W
& t. v7 h) u2 @7 D6 D步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。  I" C8 G  q1 p4 A( ^- r
5 o9 B) v# @8 H8 H- W
三、        在mdb中调用自定义DLL动态链接库
. S$ [6 {8 q' d5 o! M, h
6 ^+ D/ [6 l5 A# @$ N! C(一)新建数据库及窗体+ e& k$ l7 n, Y4 S9 T- P! Y1 v3 z* _
新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)% w, D" g% L9 }7 `) F7 o

- _- @. s5 ^' i: q/ G, G4 u0 D- i; Q: P0 F" l/ i3 n" @
(二)引用【我的动态库.dll】库* I3 T! [+ n9 Z
按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。
0 ~$ e2 o( G$ y& C2 ^
! ]; N" X+ R* d0 q  z3 g( v; Q: V% K  t/ J9 x+ Y% h2 f( u
# E5 @( y9 V& s6 ?- H' x
& ^# Y9 D' M3 k, l, w: t
& m$ Q$ Q# V4 Q5 ^

3 X( X" P6 N, A. Q, y6 F! O
0 \9 p* p. u: W
$ e8 I! L: V7 Y5 X6 F. f( w# s7 `" k; m7 Q
. _4 x8 ?) F: s% c& g0 e4 N
(三)在【CmdFindNum】按钮单击事件中加入如下代码。
- t  j& S+ x% r: z- `) `7 n. HPrivate Sub CmdFindNum_Click()
& j; P& O8 V  ^! e, {, ^& X  '申明自定义类
% y. @& N0 l2 p5 @  Dim MyFindNum As 提取数字
$ d0 q; E& @3 H: D# q' d# Z+ A  Dim strOut As String
( k, o+ V& x2 H. A1 |# n  
' m, q5 l: W# T7 P& X/ a  '实例化"提取数字类"对象' c& Y& Q( B" W( P3 m
  Set MyFindNum = New 提取数字4 C5 I) x  i+ I  l2 v
  '将函数输出结果赋值给自定义字符串变量* H8 v+ P& P2 y
  strOut = MyFindNum.fFindNumber(Text0)
& d1 h# M( e- C9 p& F  6 w9 r' K% ~- t+ u9 \2 k
  '在消息框中显示) P% M8 j6 Y4 Q% S$ E
  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
5 p% O- ?. `, b+ j+ w  U6 K. F' v7 iEnd Sub
5 e& z- F$ z9 k
  L. X. t" u% {, y/ j# e点击保存后,你就可以运行一下窗体测试你的成果了: Y1 J# E  c' J* c2 j# l
 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。
4 h$ ^6 O1 u7 x3 Z* i4 @" K5 O5 B+ w+ c1 T

* M" T" F- O/ D$ L" W, h, W

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif
- |) R  G1 t7 q2 O( g: ?+ m& {VB封装DLL实例讲解(一)
; z3 m! R& _) m4 k& {/ l. F( U
十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit
; ^3 N; H/ V" U  kImplements SWPublished.SwAddin
) Q9 L# ~: H4 |* G" ODim swApp As SldWorks.SldWorks
& r) r$ e; p) }. D/ p$ _* H/ oDim swModel As SldWorks.ModelDoc2
, g! R- b+ A6 L+ A. f" F. R$ sDim swCookie As Long" `0 o  z9 q1 m9 @+ G6 j2 |
Dim swToolbarID As Long! V) Q% d/ p* u( w: \, G9 r! N
" {* i; m/ c( o4 t8 P# r
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
! Z$ V3 M- a1 h: v1 [1 P   Set swApp = ThisSw6 T1 s7 [% c+ u& m
   swCookie = Cookie
8 z9 B; D# G' p7 q: ?' }   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie
( l* _* o+ r# y5 y   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5
+ S( c0 |2 R$ F   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","4 r9 f6 H- }) F/ r" B% _
   3 E$ F$ V! i, t1 g
End Function
3 u, K# m/ V5 N" I8 H" KPublic Sub Block_MenuCallback()
/ k9 s8 B; q: G- A# t) u- m* e  Shell App.Path & "\螺纹联结标准件库.exe"/ o0 h5 |1 G7 A) x
  Exit Sub& Q$ b( S; a/ D" a
End Sub- Y& w8 {6 n+ }7 D7 j- A
Private Function SwAppin_DisconnectFromSW() As Boolean
0 o8 Q' W" A  g$ b! L+ K& s        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
- d7 p- n# S  X" d$ k: @        
# z  b3 p6 n; p% m. T6 P# ^End Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

快速回复 返回顶部 返回列表