QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
7天前
查看: 2487|回复: 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 编辑
/ W# ~0 b+ x6 f( u$ |& P9 ]; c7 B: R: R4 g4 t$ ~4 v# E! U
VB封装DLL实例讲解(一)! _$ `/ y& F/ a! W% g

  Q" n: ]8 X$ O& \' Y3 k; \1 S0 R0 e4 z, n
一、        DLL基本概念
  b' J' h! S# i( y9 x1 V(一)概念
# A- p3 c; H- B' b4 uDLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。4 t0 k) S& W; A+ g( u
(二)主要优点:. e9 q- |* n! w
1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;$ o8 |, f1 S0 C, A  U
2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;. B2 d" c: G9 N9 ^& F( H
3、从ACCESS角度而言,还可以更好的确保核心代码的安全。" |: u4 M: Y1 I: J( w0 |, h) |

1 A4 @! R% T6 }/ M+ H/ I二、        用VB封装VBA代码,构建自定义的DLL动态链接库0 a' q& `+ }& _; S- I" O
(一)ACCESS中实例代码, q8 A4 Q7 k# }7 I
下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。! Z$ N/ [% h$ r( |  w: |; P
我将就这个实例演示如何将该实例VBA代码封装成为DLL。7 S6 d5 @8 A! c9 e- L8 f
5 G$ ^2 ?( C2 b1 C. R
9 i) O6 i" m2 I5 l& O

5 r8 B6 [4 G, g: G1 n 按钮单击事件代码如下:
: H3 E2 D% s- W/ R2 v3 NPrivate Sub CmdFindnumber_Click()
) {0 v  N. F) T9 ]: k  Dim strM   As String     '初始字符串
& B. [6 s& N* X& S# ?, D+ ?  Dim strOut  As String     '输出字符串变量. S: ?1 \; L( P# [  U
  Dim I
" U) k& b7 ^5 c( K2 c  
$ f- z# ]% O! g* ?  ?; d  |  strM = Me.Text1, f" R  P% `' q! A* i5 M
'从第一个字符向最后一个字符循环,以提取每个字符
, n3 D/ o7 [- H2 f$ _! A  For I = 1 To Len(strM)# H9 o8 F$ x. w7 Y. s8 Y/ l
      '判断是否为0到9字符,是则赋值输出0 T  r6 L0 g: V) d& x
      If Mid(strM, I, 1) Like "[0-9]" Then, `3 |) S1 h( c1 P9 D& i
         strOut = strOut & Mid(strM, I, 1)
2 Y' P! `2 a5 z9 {; m% Y. q      End If
& I* l/ W' p4 l+ t8 f+ M  Next I- I9 x  K1 \  l- x+ C! W$ R; R
  '用MsgBox函数进行输出测试
% t, T  ]. h6 A: R+ U3 _  MsgBox strOut) y) L5 w( j+ ?' ?9 F2 A2 E5 n( d
End Sub: F7 W+ R$ |. A6 V% @
    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)) X. J$ U, @3 G) m  r4 d8 ]9 p7 r
" d0 m( t; \+ E5 h# P) j8 ?
(二)VB封装实例中VBA代码3 G' n' u1 S% U
步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口+ C; k- G1 f% d, C) x# x( F
  c- A# V4 l2 F/ J; \

7 u. U; U* S/ X% v/ E  R
: R* d8 k6 X: v& y# _9 d8 M. d+ a: i0 t& M; E# T& j
1 M' ?4 O; N, I: G/ c7 q+ v! @
步骤二:修改工程名,这即生成的DLL库名3 \  G$ D! G2 @  p
* g) a1 D, _3 L/ r9 [7 Z8 {( @

$ r8 ?6 [6 g' N, |, T: W' l, X
% \# ~2 E; s6 r0 a
( M/ Z8 p3 _' I$ p5 x3 ]. `7 T0 z
4 L0 Z, O' V- Q步骤三:修改类名
- H3 c4 N2 D; o: O' w7 \% j  \8 y0 I0 @. q( t% y

3 n7 o3 u! [( e1 m  v" g5 x: o( {: R: R! m. u5 W0 O' \3 q  t! w/ _
' B' [& L" i2 T% _; \
步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口; q9 e2 Z9 m0 o/ Z6 R
: t1 m& w: q' c. ?1 v

( w& u9 W- w$ f9 e2 z  S( i2 ]. c) p0 `3 k. q
代码如下
$ i9 b# e/ d3 t7 i, m'将这前的ACCESS代码改成一个公用函数% K: s5 _% ^6 b4 D  I
'输入:strPutString 字符串变量,需分离数字的字符串0 ~1 h5 ~( ^+ S9 r
'输出: fFindNumber字符串变量,得到的数字字符+ r$ }8 T! Q, n  t! u5 f1 M
Public Function fFindNumber(strPutString As String) As String
+ I4 m% g- f; X5 @/ N: d4 B) G- Z   Dim strOut  As String     '输出字符串变量" Y) I* m: K# S1 ]) i( N
   Dim I0 h4 o  _; j$ M5 D
  
& Q1 v8 w; z( {" j0 }6 o8 }7 p   '从第一个字符向最后一个字符循环,以提取每个字符
2 h7 a$ {' Z% Q: I& g) T   For I = 1 To Len(strPutString)9 a# Y7 E. }0 e, L5 p; \: {
      '判断是否为0到9字符,是则赋值输出
/ V' \* `7 N9 r6 u9 ~       If Mid(strPutString, I, 1) Like "[0-9]" Then; R/ j0 e( J5 @. `: a$ k
         strOut = strOut & Mid(strPutString, I, 1)7 h& y! J0 o2 f9 _7 N9 S
       End If
, w5 a5 g5 u+ s" d/ w% e   Next I* Y7 v( x0 |/ L% ?3 i
   '数字输出9 k/ _* B5 x4 t0 V' p/ R
   fFindNumber = strOut% |2 h) T5 ?3 n  z
End Function
+ e) M  r: I. e4 Z# ~# n# A
- t& j$ E5 z) L; n- N" F步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。
. C4 v7 U5 h' k2 ^& q6 G; L  x) {2 ]- `( E9 x- p
三、        在mdb中调用自定义DLL动态链接库3 r  S: ~8 a, D. M! q+ k; z6 I

# _7 X; w- h3 v/ F2 q& [, }7 [; C(一)新建数据库及窗体
1 l8 ~# ]( w# \1 p新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
& Q+ t. s  r* ?! c3 J- H% }* r/ a% i$ V7 ^3 j, D8 G/ D, c, V+ }; D- F* I

3 G4 a3 p6 t% {. ]1 k(二)引用【我的动态库.dll】库  t+ X6 T# a) w4 Q" f' O
按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。) H* N$ K4 k. e7 F3 ]

0 z! |: m4 k+ R( U# L2 p$ K2 @& ]& d, B  ?# S
4 D- g4 j6 l% f% W2 l! M) S

3 [/ Y2 g% E: ^6 T; m' ~
4 a) i$ B- g0 p+ l) j: O$ Z' Z- y. T, s7 N1 t

$ m' ?, X- e9 G3 q
* V; B* _/ J# V9 t4 @3 n( f1 j! G5 K# w$ Z

7 q0 ^- M1 E9 u- m+ |# t4 _' l(三)在【CmdFindNum】按钮单击事件中加入如下代码。
5 e( I$ k. }7 m* E  ~) }' {Private Sub CmdFindNum_Click()
1 q2 R+ s/ D. \( q  '申明自定义类  _5 a/ n5 y7 g
  Dim MyFindNum As 提取数字: E  v# F7 G" m; K" k8 M% W
  Dim strOut As String
2 l* I' v) O1 a9 ]  
. t6 D2 X) \5 E  '实例化"提取数字类"对象7 [1 T# U0 ^% x
  Set MyFindNum = New 提取数字
) K2 A2 X; d/ l; H9 y. G5 L6 P" R  '将函数输出结果赋值给自定义字符串变量! x: K; @, V# u8 n; E1 J
  strOut = MyFindNum.fFindNumber(Text0)
+ F9 p" G; |" H) e4 b4 p  
+ u+ `% F: |" K% v  U; H  '在消息框中显示6 X0 P! L" d- T+ i& D
  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
1 J( H3 V: H# ?! v6 a8 PEnd Sub
& z1 c  M% d5 i% d, G  b
1 A( I0 D- v2 A* e点击保存后,你就可以运行一下窗体测试你的成果了
% w  S+ \3 v& U# I  d 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。$ ~) }9 `6 r) H( P
7 T% i  P* G: X) ~, d, o
6 F; a6 q9 ?. G2 o3 v# K# v$ G& X/ j

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif1 Q- z# C7 K- g' V9 N5 w
VB封装DLL实例讲解(一)

; `8 F7 t6 Y1 Q1 N0 P十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit! R' w' N9 m- L8 u7 Y6 F
Implements SWPublished.SwAddin
6 F% @4 }; @0 }Dim swApp As SldWorks.SldWorks
" A4 |5 T# J% R  u% uDim swModel As SldWorks.ModelDoc2) ~# Y8 v+ T8 C0 R3 H
Dim swCookie As Long) Q. y4 z- W9 G9 c
Dim swToolbarID As Long
$ g, ^/ U4 \) C/ G7 i  d
  ~+ Y/ ^5 i6 u+ |Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean% R5 h8 |8 H( H
   Set swApp = ThisSw
1 ^) P( w  P1 a" h! Q5 j   swCookie = Cookie
, k: C# j, R; l/ @2 U, L   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie
1 G5 [6 |" N' `1 q% {8 n   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5
4 o" U0 m1 Z# e( N& Z/ j   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","/ |4 E% b1 ?1 Z, `6 U+ b5 c
   
3 l' z! M' n' Z7 U  ]" VEnd Function2 o! \% Y3 X6 p* s
Public Sub Block_MenuCallback()
+ }! q: ?3 R& w4 R/ Y1 W  Shell App.Path & "\螺纹联结标准件库.exe"1 T  l. M% K& U% w8 H$ J
  Exit Sub
# N) Z5 F8 `6 FEnd Sub4 c5 }& t% s/ P6 `! q* g
Private Function SwAppin_DisconnectFromSW() As Boolean+ b7 ^7 @: J6 F0 I: U  W* @, R% ~
        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
+ G8 |' Y& Y# \. Q9 l        1 ?' [1 e8 f' d
End Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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