QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2493|回复: 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 编辑 , c2 V' @/ H* @7 Y' r' }2 u) ^* G

7 @7 W& N0 J  Q0 i' p, y! FVB封装DLL实例讲解(一)
1 _% |5 j2 \: `/ |+ u3 i$ a2 e0 i0 Q$ F
+ }# _) J8 o2 A. P5 [  Z  M" ~/ l% m' |
一、        DLL基本概念
  R% c6 x' p$ D5 g7 \(一)概念5 a- N+ A4 ?# e
DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。
% s; j+ j% u( O$ w# |/ X" l(二)主要优点:
$ e' J' X) v8 {0 k! @1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;. i# H0 Q7 j8 C6 G
2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;
" M3 h: }/ T3 P- X( P6 M5 k3、从ACCESS角度而言,还可以更好的确保核心代码的安全。% E% ]' p4 I! N- i5 q2 m; _; k
5 |0 @; h4 c  X8 l* t. @
二、        用VB封装VBA代码,构建自定义的DLL动态链接库
" J/ r7 F" H2 p- s(一)ACCESS中实例代码5 O" Z" g3 o, @% D# C
下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。0 O2 x$ K) t) z: Q6 h0 T
我将就这个实例演示如何将该实例VBA代码封装成为DLL。
# N3 i6 y0 i* }
5 `, E4 i, \2 a; J& {  r
( U! I# ]$ F' s% |" k0 j
. Y' h& k4 I; I1 C5 p0 Q  l8 d 按钮单击事件代码如下:
/ p& w: ^6 L) u1 b) c6 Y/ E" b8 R0 b4 IPrivate Sub CmdFindnumber_Click()
0 |: r! X% a! V; f- B/ |' g  Dim strM   As String     '初始字符串' J$ ~5 F+ l+ X! f9 ]. l6 C' E
  Dim strOut  As String     '输出字符串变量
0 O; f2 [# G7 w" a1 R- b  Dim I
+ X! F  m4 _6 F) |  8 p3 n7 ~5 U0 ^2 l* l1 X
  strM = Me.Text1: ^4 J. {* r: u' H8 w5 R9 M$ Z9 U
'从第一个字符向最后一个字符循环,以提取每个字符
: l3 Q4 ^2 p3 f/ @; Q% P$ a1 M  For I = 1 To Len(strM)
1 p$ _( ^2 f8 ^* Z      '判断是否为0到9字符,是则赋值输出4 c* a+ U- I4 _  p2 p8 t2 E9 Q! j( p
      If Mid(strM, I, 1) Like "[0-9]" Then
! }6 x" j4 |0 m! p& T  r         strOut = strOut & Mid(strM, I, 1)
0 B' f9 s" q$ R8 X3 U2 m8 [! l      End If
5 }) q% [6 u: @. x8 M& r% k  Next I
# a3 D" n0 l. G9 Z& \4 i7 m  '用MsgBox函数进行输出测试$ f$ \, ?! P* b8 p9 p/ a
  MsgBox strOut/ X+ ~4 I2 e$ \1 ]0 z! q% O6 O- e
End Sub
9 S; b+ v9 T/ r2 C" L5 E  ?3 i$ r    以上代码还不能直接用于封装,须将其修改成为公用函数(过程): {0 n, ~$ w0 m! K& L3 S% s" o" Y. c3 j
  S1 t6 i% j( N+ U% M
(二)VB封装实例中VBA代码$ j9 K. N! E( L/ Y* j
步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口
. @# F: Z; A* b" y- _3 d5 d  ~
7 h8 ?% N3 {/ t2 z+ B1 ~0 T- `" C
* _% Q! S' m* Z: Z8 U! K8 G, h! `+ [' v. g5 N4 ]! R* ]9 w; a8 P

  Z$ I& u9 J* {/ O" [  T
: O; h$ I" E* ?: W步骤二:修改工程名,这即生成的DLL库名
( ]/ `7 [5 \, `' i, @9 n, [1 }6 W) V- f4 _; O5 ?/ i" S( T
6 {% \0 Q  {9 C/ q7 E; Q3 ?( O
1 X# z( ?+ i/ q  |6 F5 @) c

! T) f1 Z$ Z( V4 B1 P0 `) w) J: C- O8 P9 j  |/ a
步骤三:修改类名
8 `% {% u" d! a* y2 b: d7 o$ u2 V$ f, D% A+ K. [
! p* J) W; E7 n
6 H0 x+ L0 j3 `  g

' ?$ `3 j% \% A% t0 A2 |" ^步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口5 ?* G' z7 c9 r# ]. u
8 d* h! y( ~' ^7 K6 m* X
- ^4 V* O5 z  j& ~: j; S' \
4 ^" |2 @1 ^) V* H, ]& R
代码如下( N( F8 n  N- K' K& q0 \& w) x4 c! L& U
'将这前的ACCESS代码改成一个公用函数2 F, |5 e, y8 S- |; f" V/ Q. P
'输入:strPutString 字符串变量,需分离数字的字符串
# T. k9 K  y, B5 T$ h'输出: fFindNumber字符串变量,得到的数字字符
! A( A; D2 B7 [! mPublic Function fFindNumber(strPutString As String) As String2 x$ W/ b" k8 E4 G7 J7 E
   Dim strOut  As String     '输出字符串变量
  M# n8 C0 Z- U- n/ m   Dim I
! q7 P9 Z0 B% W  
. e# [/ f1 b4 b- ?* {   '从第一个字符向最后一个字符循环,以提取每个字符0 v" x- K/ E% O; C# B
   For I = 1 To Len(strPutString)
/ V% b4 r1 k  v' w7 D      '判断是否为0到9字符,是则赋值输出
2 a) @/ P3 A- w0 _; ]* t       If Mid(strPutString, I, 1) Like "[0-9]" Then- Q+ U/ o+ g4 a+ g% s0 I, {
         strOut = strOut & Mid(strPutString, I, 1)4 ]0 u6 t( V3 Z( N' T
       End If
5 f6 O1 L0 d, e; X4 v' \   Next I
4 y- m+ Z+ ~; e. D, z1 Y: F   '数字输出
7 E$ r9 u  o% L! k1 Y   fFindNumber = strOut0 h% T) f( d! F+ b' D
End Function5 j$ [) {+ A, g( Z9 N* A
: c% t7 ]# R3 F/ b3 l; \5 M. K
步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。
# U8 d* ~% |9 _( l. }" |: a; X. m( O  u1 g) i. v  M' K
三、        在mdb中调用自定义DLL动态链接库: H! \# J7 G$ M6 R2 C. ]) v3 n

* g; g: @8 B; S8 |2 u" }(一)新建数据库及窗体6 A0 H3 M5 ], K: T1 _
新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
9 \+ w. ^2 X7 @  x) k$ t/ t9 m7 w0 f3 S
; L7 c- o7 ^) l2 x
(二)引用【我的动态库.dll】库
8 |3 u0 R, Z6 e5 m. T按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。  _0 c+ t9 i' I1 L1 ?

6 `- r4 E4 p& Z: e" J
* e1 j+ S: Y7 W/ g
* w. x6 @: Z  d1 R# z, C7 Z/ w  E: ?# K0 M, F* v$ U
/ w% c9 q5 g! r, a! X" o
  n2 R1 A$ }+ {8 F

  |$ M1 ~/ _1 d- M% O& N. \4 e* N! E; g/ d, @" ~
8 R2 d. ^6 z. I% S. b, N. P
1 j# T5 M3 v4 X
(三)在【CmdFindNum】按钮单击事件中加入如下代码。: o' H5 i; y# _. t
Private Sub CmdFindNum_Click()0 |: ]1 x1 |" C4 I! p% z1 m
  '申明自定义类" D0 V( V" h  H6 f$ ^' J3 }  q
  Dim MyFindNum As 提取数字" S. }3 b6 [4 q0 {
  Dim strOut As String2 r6 i- |* g* A9 J( |2 C+ k5 ?
  
0 A& H, f  R8 @3 K3 V' A7 O  '实例化"提取数字类"对象8 I: H- C# q1 b" {0 M* p
  Set MyFindNum = New 提取数字4 S/ r# n* h4 b/ M* Z9 z
  '将函数输出结果赋值给自定义字符串变量3 V* n2 \. s& E
  strOut = MyFindNum.fFindNumber(Text0)1 e# L7 X3 P( @5 U& A7 q  F  H
  
1 c6 a0 g' j! s8 C% L4 X0 d7 ?  '在消息框中显示
9 v5 D. d# X: X4 G/ T  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"4 X3 f3 j# }: t' k5 u
End Sub3 Q* p. r  d) W8 p0 J! ]0 v
. G# X2 ~1 o9 B+ ^+ b! l
点击保存后,你就可以运行一下窗体测试你的成果了
! q& n5 Y, L# J- F) i7 e/ }( {/ r 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。
7 [( L4 H0 Q5 a+ I- p
& s+ v; O+ r, b2 \9 O: K1 Q5 B/ d% S6 g

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif! _. z7 G# j: f: u) k
VB封装DLL实例讲解(一)
$ X$ a: H6 ]' `" a5 d' f# |
十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit, v  c. d* N  o
Implements SWPublished.SwAddin
  F0 D  B8 m. r# rDim swApp As SldWorks.SldWorks9 {( _  B5 m' f: W" V- f0 ?
Dim swModel As SldWorks.ModelDoc2% M. p7 p; C% j) Q+ C  A$ Z3 e+ A
Dim swCookie As Long
% t8 {$ b7 M; j3 t2 O; hDim swToolbarID As Long4 B( a; [- s9 n; l
4 @( D6 f  z% ]: z6 H/ u: `) @5 }
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean" G; V  e) c9 ]2 o4 \. I
   Set swApp = ThisSw* T) y& p% K; G9 b/ T% x5 E' ^
   swCookie = Cookie
7 `7 H* p) V& {' d' S4 ^; }   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie8 ^3 _+ z+ j: j& V7 c9 @: L
   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5
$ r* q7 Z( F8 q   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","  l. o- J% U+ |( G6 j+ O
   ! U% \- P0 J7 v7 r
End Function/ x8 u5 x' n0 d4 S
Public Sub Block_MenuCallback()
+ m1 `0 \8 }: a1 P9 N: G( J8 Y  Shell App.Path & "\螺纹联结标准件库.exe"
. v2 R  q7 y+ s5 U* d+ N  Exit Sub
  w( V' k% A. |6 y9 H9 J8 @End Sub1 }7 v& x" v: Z
Private Function SwAppin_DisconnectFromSW() As Boolean
$ u5 P+ K. S' P+ g1 T        swApp.removemenu swdocrart, "螺纹联结标准件库", ""- |; q/ R) Z# ^5 }( X8 F
        
. Y6 J4 g6 `9 sEnd Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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