QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2403|回复: 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 编辑 4 |  y& W. B+ ~

8 s7 Q3 S1 n/ F) o1 d) oVB封装DLL实例讲解(一)
8 }8 C! q& H, p) T) `, p  ?
8 K$ Y9 P9 a8 z; o
- B' `- D( q* r一、        DLL基本概念1 d  z' ^7 V0 o5 p% u
(一)概念
# K; s* r  u! Y8 n5 o$ w! N1 ADLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。! D  X7 \0 D  S6 ?, ]0 s" A
(二)主要优点:
/ f5 k9 Z% X( Q$ c" x8 S( T1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;2 i+ r3 d% U0 w. B3 N' S
2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;9 f8 r' U/ s  ?
3、从ACCESS角度而言,还可以更好的确保核心代码的安全。6 v  w# j0 [& W, Y3 M) H4 B

* p( F: E8 S. `- K1 n- S二、        用VB封装VBA代码,构建自定义的DLL动态链接库9 `2 q1 ^. E( \' X1 x; M
(一)ACCESS中实例代码
9 K/ n0 p# _# D' c下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
$ V  Z* V2 V6 r) Q& V我将就这个实例演示如何将该实例VBA代码封装成为DLL。) L! v9 T% s' Q) T
+ y% A# H5 ^: Y- X) b
- r& [: x( u( U: M
6 g: ]6 Q4 b# R5 t
 按钮单击事件代码如下:' T, i$ {4 [6 M+ g8 N5 I" j
Private Sub CmdFindnumber_Click()7 [5 o6 T+ {0 P. v$ p9 x4 S0 f
  Dim strM   As String     '初始字符串
" A4 c/ Y) `8 j6 Z( b2 z9 P  Dim strOut  As String     '输出字符串变量( j6 n+ {/ @: R% O
  Dim I' _2 f6 C6 X3 S% ?* k
  
6 @# g# T  e4 m' D  strM = Me.Text16 r% U# t+ K0 y1 D1 w# E
'从第一个字符向最后一个字符循环,以提取每个字符
, i! t; b  z( l& Y  For I = 1 To Len(strM)
$ Y- z" O( l' [. t0 F7 L      '判断是否为0到9字符,是则赋值输出
: P3 ]8 p6 U: `% m) B& G( U5 t      If Mid(strM, I, 1) Like "[0-9]" Then
$ C) R* o; w, X         strOut = strOut & Mid(strM, I, 1)$ E+ L  O4 T' ?3 Z8 P9 U& X6 C
      End If
/ Y5 C$ F$ ^+ {  Next I( [# n$ x( e$ b! y* ^
  '用MsgBox函数进行输出测试
/ c( d/ u3 S4 c' [% S' t$ V. t& K  MsgBox strOut
% G9 A. @  t. S& ?3 z  O! Y# fEnd Sub
% i/ o3 }- x0 W3 f- J7 w    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)- n5 D, x7 {1 G1 c; }
0 x  N. d, O) g7 N8 C, k8 @. a
(二)VB封装实例中VBA代码
% d1 Z: \; ^& k% Z步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口) O( c% ^0 N* ]0 {* Q8 E

$ a! m- N( y( v* e
' B5 Y- x+ `" X! F
! N* i1 y/ J* \4 V  e$ |- h8 w4 R9 \# r" p/ M; T3 L( j
% i3 C/ D/ x8 r& n, z
步骤二:修改工程名,这即生成的DLL库名
0 Y* ^" {1 X. Q3 {2 i# D) o1 Q" e7 G# b' |+ c: B2 o
7 L* E& ]( k$ Q( \

5 `+ r5 l0 F, Y+ |- e- W+ w
/ ]/ p. Q3 j+ |
2 K* k+ b( ]  ?步骤三:修改类名
0 }' d2 L' s- R& z1 ~- H- w* D
7 ^& i7 O, e, d4 {1 d
3 z8 X! n3 s% }- f8 w. x) ]; R6 f3 g" Q; ], Q6 V
* O) v! }1 n  i, a7 h0 N( A
步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口! t/ v7 D5 f1 J
& w& |. {8 C. W/ d( h- L

% q! f, O: z  V/ Y: b) H4 \3 @: C: \! O0 ]6 ?
代码如下
/ G" A2 x8 @& [0 k8 {# F'将这前的ACCESS代码改成一个公用函数
# l$ e0 u9 u$ u: a'输入:strPutString 字符串变量,需分离数字的字符串. m- d: ]& D  L0 Y8 q
'输出: fFindNumber字符串变量,得到的数字字符6 ~) Y/ o, ~  B0 Y
Public Function fFindNumber(strPutString As String) As String) {3 M6 J, c; P' E7 |  v
   Dim strOut  As String     '输出字符串变量+ s; g# j: H# Q2 n! U/ L
   Dim I, x! N6 r% L2 C  M" c4 e- O
  
; O* Q0 v- Q9 [( z- f& e   '从第一个字符向最后一个字符循环,以提取每个字符
" _; s0 J0 M4 x0 F% L' Q" |   For I = 1 To Len(strPutString)
$ j$ ~; }1 N& Z  p- y# i7 z0 `      '判断是否为0到9字符,是则赋值输出0 g7 M* S/ N: F2 }5 r) Y
       If Mid(strPutString, I, 1) Like "[0-9]" Then5 \1 r, \- _0 Q- E
         strOut = strOut & Mid(strPutString, I, 1)
0 u1 }3 q$ n$ k$ O  \       End If
* s) l- @2 d( a( E& \- y   Next I" l6 Q" B0 I. _" I7 `. x2 t- Y5 U1 w
   '数字输出3 G$ e7 C! h+ V4 e& ^) d
   fFindNumber = strOut' @3 [1 ^% v" P1 ]; A. o
End Function; }) ~! T$ }6 |+ w) u3 r' O
' J' ]0 W4 F& p: q
步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。- T( _7 a4 T1 |3 }& J, c

8 q2 f. m6 g! m, W; y! R/ t- t三、        在mdb中调用自定义DLL动态链接库- b4 {7 U( t& p% i# |' w6 r& |7 x
6 ~' V1 z8 A# r: N% A4 D7 l* G
(一)新建数据库及窗体" N8 R* u6 E# ~* E) j2 Z
新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
5 p+ r5 J9 S( R- Q
  y$ {# |3 P% u4 L6 I. U( _% f8 d  k* f6 M. v! ~
(二)引用【我的动态库.dll】库# @3 d" e4 L8 R7 @6 o# `
按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。
5 _! B* i; F. {. b* X
( p- A* o0 L3 A' \
5 `, \' E+ L6 P$ R; ?
: f7 C0 q9 p6 [7 I5 u- u. V( p( i7 ^8 N) _- f: ?* W8 J

, u  F9 T3 n4 u/ S+ _: E1 P9 U& j1 @
- f% M* W2 e8 Z( Z7 r
3 Q7 y5 w! ^- A; x
6 w4 O, a% o8 H
! F2 G# R! k) z! ?6 D, Q: Q  c8 A! G7 Y4 S+ h, V. T
(三)在【CmdFindNum】按钮单击事件中加入如下代码。2 [. l5 [- W% s6 N, B/ m
Private Sub CmdFindNum_Click()
* D. G9 [/ `+ y4 y; |3 o  '申明自定义类
6 F# d3 k2 B6 @- M  Dim MyFindNum As 提取数字7 x( d+ G. W( z: U1 n  \
  Dim strOut As String
: ~/ y: t4 x( c. W2 q+ X0 O# g  ( O5 s, G3 ~3 m. ~( x3 e& [- k
  '实例化"提取数字类"对象
+ E9 o1 k- t9 l) ]) W' o  Set MyFindNum = New 提取数字3 r+ ?# w  }% }3 i5 u5 c
  '将函数输出结果赋值给自定义字符串变量
9 P9 u; i: Z: W: g6 g; E; V2 Q  strOut = MyFindNum.fFindNumber(Text0)5 H7 i: e6 h. c
  
7 u5 G3 g: O  E8 [* `  '在消息框中显示9 Y8 R7 [+ y* M1 Z+ v  `! g
  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"- y% p+ s; ?! @( M, v3 ?
End Sub, y7 U5 y2 Y" ]. W" `' s3 l
% A4 \2 i0 i$ S
点击保存后,你就可以运行一下窗体测试你的成果了
- L1 o/ X  M, J 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。
# F; _( }* y+ a8 V4 {
1 {% H' R- f8 O( B  w
% p# c  {$ @- Y7 Y4 h8 s6 Z1 m4 Q

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif
+ s' U0 Q0 R* \$ d. ~* q* |VB封装DLL实例讲解(一)

5 v# D$ a9 M$ {1 N& L. X, R6 E十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit
' y  d- K1 {( v4 SImplements SWPublished.SwAddin
" a/ K3 g, S9 nDim swApp As SldWorks.SldWorks
+ Y1 C8 ?+ ]1 Q# ~, V9 |Dim swModel As SldWorks.ModelDoc2
' v8 e4 U' c8 l2 d: U5 w5 S; L! aDim swCookie As Long
' i3 [+ [$ a3 G- m4 f: b+ FDim swToolbarID As Long* \+ N* w/ E" A: u
$ G! o4 x3 ^0 {- O
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean& G% V+ F+ o' R
   Set swApp = ThisSw
& ?  J. I5 g6 z: \& S   swCookie = Cookie
; l" O6 s; Y& J( e) Y! _   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie) {' g. D6 E6 o1 @' R0 I, V
   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5
3 r' j# K4 I( `* I4 ]   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","" j* G' {+ b; _  \! P3 W: w7 [5 O' v
   - o2 G3 c% b) @" I* _# q6 g+ I6 I9 Q
End Function
+ [' C5 F( @# WPublic Sub Block_MenuCallback()
' g2 x1 w$ {/ r  P  Shell App.Path & "\螺纹联结标准件库.exe"
: w* C/ V9 y' P9 H' {4 s  Exit Sub' p) }. E4 y, p/ M
End Sub7 x) D" ~% H5 k
Private Function SwAppin_DisconnectFromSW() As Boolean. Q9 B5 B" C; ~* x; D  ?0 u# o
        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
* f7 ]8 T6 M! x, j        0 v3 _+ n% V6 C& M: F
End Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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