三维网

标题: 哪路大神有 DLL创建solidworks的菜单 的程序呀 [打印本页]

作者: work_wonders    时间: 2014-5-17 21:50
标题: 哪路大神有 DLL创建solidworks的菜单 的程序呀
用vb6.0编辑DLL插件 然后可以在solidworks里添加插件显示菜单, 如果有的话指导下 谢谢谢
作者: やめて    时间: 2014-5-22 10:29
V97_1五軸加工概論.pdf
作者: NC@jiang@nan    时间: 2014-5-22 21:20
是什么东西
作者: yjyeming    时间: 2014-5-25 11:37
本帖最后由 yjyeming 于 2014-5-25 11:44 编辑
3 q9 }) A- S2 J2 y. i! m- O" Z9 `- O/ l) y( {
VB封装DLL实例讲解(一)% h% X# O* _% [* x( ^' T( L; q

& V' J' y7 I! \
" n0 q4 l7 N5 `4 r6 G一、        DLL基本概念6 }$ S* z& N+ [& ?
(一)概念4 y! ~8 I' G- |  Q3 O
DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。
0 g  t- z3 d% Q# G9 Z  P(二)主要优点:$ q$ O; j) t3 q. ~# n( _- w7 m/ V+ n5 a
1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;
* L- Y& O$ N. J% G3 h  D: {' A2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;
' o# O8 x& ?% d  y: c3、从ACCESS角度而言,还可以更好的确保核心代码的安全。& W2 k2 o( v- J0 G- g7 z

8 i/ [: U( ^: _8 H$ H2 A二、        用VB封装VBA代码,构建自定义的DLL动态链接库; Z: x: M$ |; S5 f
(一)ACCESS中实例代码% o: X# C! E8 M: ]( e
下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。0 R% \4 |7 U% K+ B9 p
我将就这个实例演示如何将该实例VBA代码封装成为DLL。* ?8 N3 }2 t' [  t

  N6 f+ v0 H, g4 {3 g/ P ' u+ ?4 M! ^" f
7 \; B5 X7 t& F& I; r( p1 R) S
 按钮单击事件代码如下:. |  v' Y; g- k+ m+ ]' r! [7 |& C
Private Sub CmdFindnumber_Click()
+ M6 y  q6 _* G, G( A  Dim strM   As String     '初始字符串6 O0 m! v' |) k% h1 l8 b' q8 t) G
  Dim strOut  As String     '输出字符串变量
' p) \6 d( S/ m4 C9 D  Dim I
, N# @7 r; j0 K! n3 m  
2 g/ X+ {/ t0 B+ O1 e7 @9 Q  strM = Me.Text1
/ p3 {! {- m6 _: @'从第一个字符向最后一个字符循环,以提取每个字符
" [6 K9 R! d- k9 M2 K8 V- j( L  For I = 1 To Len(strM)
- v" e& b. W1 l6 `8 c      '判断是否为0到9字符,是则赋值输出
  w& r# W" c6 j6 C4 m      If Mid(strM, I, 1) Like "[0-9]" Then
5 ?. x, P4 ^# }+ p  \5 e+ r# D; z         strOut = strOut & Mid(strM, I, 1)
2 g9 s; I: X/ E4 T. v# G. M2 k      End If, b- k! c- z) b( f, Q
  Next I4 i/ `7 n/ L3 c3 s1 E5 V0 q' ]
  '用MsgBox函数进行输出测试
8 s% \1 L5 o4 g# h3 [4 c8 V0 L  MsgBox strOut
/ S" f) ~* c9 T  H( e/ OEnd Sub
  g! a% s* Y* d+ B9 `; q, O8 ~2 H- c/ n    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)
% \# \# X- c- W9 a  p: y$ Z& w8 b7 n9 E
, Y% \# S' N8 R& [7 D4 ?(二)VB封装实例中VBA代码6 W! D* _* `; Q7 A+ |0 N% X% Z4 R
步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口) k4 a  O; U0 ?% D& V

& l5 V& e2 V8 p$ V3 S9 D: ]
/ f  Z" U- E4 D" H& [. ^
! q6 Q$ Q7 X; Q( V8 O% B5 p8 p, V+ ^% C% R- a8 E

( J5 Y' y3 w. c0 Y3 l步骤二:修改工程名,这即生成的DLL库名2 t2 ~+ }4 ]" @7 }
0 m, Z; s: k+ l  C6 r' T

# e4 n1 n2 l1 D1 B, w8 n+ ?6 P
; y9 V  n1 M: X& W6 H
$ a; `3 v' f5 @9 u; ~
步骤三:修改类名
. C  f3 D8 q* {: |9 A7 q/ K, o3 o( x( y) X+ y7 z
4 V' `9 Q3 e; Y+ Q
4 S! w* N4 u0 A2 t& B& s& u

" p0 z9 n7 S* w步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口" L/ R1 O/ H! l4 [, j! |
$ @3 g5 ?5 S. n' d
9 h+ u: Q  m; |* p7 G+ R6 {9 e

9 A  [  `5 Q7 P3 j  o+ ]代码如下
  I4 w" l. v1 O* e5 A0 t'将这前的ACCESS代码改成一个公用函数1 K0 N: c0 X, {0 q- T9 k
'输入:strPutString 字符串变量,需分离数字的字符串
. S1 P0 |% ]( @4 y'输出: fFindNumber字符串变量,得到的数字字符
. V3 Q8 r" \- k/ E2 @4 x1 s. z' |Public Function fFindNumber(strPutString As String) As String9 [. S9 I2 Z8 p( b$ h+ i
   Dim strOut  As String     '输出字符串变量1 F  p: G. q* o
   Dim I. ~( U  o" ?1 A% M
  * M1 a6 q; E3 U# `7 j: `
   '从第一个字符向最后一个字符循环,以提取每个字符9 ?; Z  }5 u2 {( Z( \4 H
   For I = 1 To Len(strPutString)" k6 r# n2 d( Y5 h2 |* J
      '判断是否为0到9字符,是则赋值输出1 Q- n& D" f* Q: e" O) A% V. O
       If Mid(strPutString, I, 1) Like "[0-9]" Then
' Z% L( m: t$ q9 O         strOut = strOut & Mid(strPutString, I, 1)) v9 ~$ v" l- L( r1 O. G& A+ I
       End If
9 c% F; W" r  m' p: u   Next I" w  m6 s! k8 d+ G% l2 F* p
   '数字输出
2 A& `2 K: |/ j0 `' b/ f   fFindNumber = strOut- H1 ~7 y7 |' r: j( {: h
End Function
4 C# H" M) p  d: |' @
9 R3 u. P% a7 G3 i步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。& t1 @, H* J5 |7 P/ F( Z' v2 A

  h9 c7 i0 O% e6 q% [+ Y三、        在mdb中调用自定义DLL动态链接库
! y) C& F( ^1 p8 q0 L% C; M( C
3 d9 ~' Y) C. _7 K9 ^(一)新建数据库及窗体
# W4 x( }" ?( y新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)) t; u4 f( c8 W. k1 E9 P9 b$ Z& w" B
, S1 E) ~: c8 P1 x; j
% Q# a" ?: r6 K% z8 c3 g
(二)引用【我的动态库.dll】库
7 x" n. H" q+ M- [; c# _按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。+ u$ @: g$ d$ p" T( ]

* ~' p) I2 B9 K/ Y
3 N9 m5 _. g- s/ }+ m/ b! ?6 D7 \) D, I) [

' a: x( j- P' b$ S: r9 ^
8 V: A0 ]' l. T0 v0 E; u( {
0 e/ r4 `. j% s
, D9 j' X2 J' S) h: w2 g/ O( {+ |+ E
5 g; n& t4 c# K- Y" H7 h: _

; [) _) ?+ ~- ]& w(三)在【CmdFindNum】按钮单击事件中加入如下代码。- ?: Y9 t. k: y1 c* f
Private Sub CmdFindNum_Click()
. X2 M, i3 B. U& M/ h  '申明自定义类
6 _. T$ L2 H- y, s- `  Dim MyFindNum As 提取数字
, |5 m" H7 }  n# ]6 P  Dim strOut As String
* N. ]  G1 U* q5 Q  0 ]  s: l4 p5 T8 d- ^+ P) M7 `
  '实例化"提取数字类"对象
  e' X5 F- v! b- U  Set MyFindNum = New 提取数字
* f1 o3 x, n7 C* P9 K  '将函数输出结果赋值给自定义字符串变量
! T" F5 K% O, C: a  strOut = MyFindNum.fFindNumber(Text0)
5 U& `5 I6 x# H# ]9 M9 k2 [: o  8 j+ G; _/ D: s7 f: u, k: _( T
  '在消息框中显示) P( C9 [' u3 t  V* w
  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"$ Y4 e1 v! Y4 _8 M
End Sub( \/ H, u+ M1 v- t+ y3 I. y6 N
3 _. Z6 E% I' D
点击保存后,你就可以运行一下窗体测试你的成果了
- L. g- X- I) S/ o 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。+ v" S4 Z! R/ l# u9 w# j* R

, W: I1 M( d9 p# q6 b' k  E! d# X/ ]1 Z

作者: work_wonders    时间: 2014-5-25 14:50
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif
, I& T/ t1 E- Z+ c. K8 ]VB封装DLL实例讲解(一)

2 k2 G: x0 D( S+ t4 ~6 x# Q十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
作者: yjyeming    时间: 2014-5-25 15:42
Option Explicit% ?9 X+ \5 T1 O4 Z. X9 Z
Implements SWPublished.SwAddin) z. q- t  U; n# I) y- z
Dim swApp As SldWorks.SldWorks
- }. E* `4 _. a. vDim swModel As SldWorks.ModelDoc2
: a; U2 \5 X7 U: UDim swCookie As Long. `2 |% I9 m4 l& r) T
Dim swToolbarID As Long
* |" c+ Y+ ^1 U5 x5 x- {1 m0 w  R2 C5 a  V
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
6 L# ?; N2 J7 x- O   Set swApp = ThisSw
9 A$ H! I  L+ n3 P   swCookie = Cookie
7 q( m* C. c2 o0 K   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie
; p% q4 V* a$ m; _! T   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5
" r) l# N8 I4 f; _   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ",": o. p4 ~7 Z0 h4 f/ v* I! r
   ' ]+ b$ U6 n  Y
End Function3 Y* s8 ^0 K" T" @* g: [2 h) m
Public Sub Block_MenuCallback()3 P. S+ H7 Y+ w: ^/ g9 b
  Shell App.Path & "\螺纹联结标准件库.exe", M/ }1 }4 n% H" }9 X4 U3 u0 [
  Exit Sub
) Z$ H0 n. c7 j$ JEnd Sub
* I* W$ x0 E% H- ]Private Function SwAppin_DisconnectFromSW() As Boolean) e% `" l  q, T! W3 Q$ J8 B, h
        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
1 b$ Z3 N* R9 f( Z+ E" ?2 i: r" L; x& t        6 ?# k6 b" f; P9 I- `2 |* m4 c% n
End Function




欢迎光临 三维网 (http://www.3dportal.cn/discuz/) Powered by Discuz! X3.4