QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2504|回复: 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 编辑
9 }) K" e9 v& Q+ Z! F/ `5 S" K0 ]. [- n% v
VB封装DLL实例讲解(一)" s; o2 l! t# I% ]5 \' \3 h

4 x2 @+ `# w2 `. H/ c& _# f0 E) [
7 G' l8 w0 M/ [7 f) [% [一、        DLL基本概念
) Q- D$ w) k" J7 R( ]3 _' s, ~3 G(一)概念
: t. d$ P; d( N( tDLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。
; e3 m  P/ G, v$ O+ Y9 F(二)主要优点:
( l% r  }. Y4 Q& n1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;
. o6 W% d7 M* z& g4 U' H2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;, ?. @5 s* I" ]+ `* H; _* X
3、从ACCESS角度而言,还可以更好的确保核心代码的安全。6 z- n! w- O, Z

! ~3 U5 i* y9 D$ F二、        用VB封装VBA代码,构建自定义的DLL动态链接库# O! {+ N* {2 i( s7 v: \$ S- x- ^! C
(一)ACCESS中实例代码
/ _: q& c  E0 j9 v7 b# M% F下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
0 I$ L  z1 W! t我将就这个实例演示如何将该实例VBA代码封装成为DLL。; ?5 t8 X- F7 L9 G

( ?$ [% P% j6 d* q4 l 0 r5 l+ s$ Q0 x2 c3 f: ~. Z

) B8 |0 s9 s  A, T$ P 按钮单击事件代码如下:
, t/ ~; y; a$ [Private Sub CmdFindnumber_Click()% M2 N$ d6 y: p3 S- v
  Dim strM   As String     '初始字符串" K0 b! t/ z# |# E3 w
  Dim strOut  As String     '输出字符串变量
, d$ `* Q6 [2 s  Dim I
" X! T7 S. n" ^1 ^& K+ |* k  & }& n) n8 O2 j! t6 o! s
  strM = Me.Text1# [. x! f( {  Y
'从第一个字符向最后一个字符循环,以提取每个字符
8 B! Z& ?0 N; g, E  c# f+ F3 f$ |  For I = 1 To Len(strM)
  B  s* M/ L. B) A3 m: x; A      '判断是否为0到9字符,是则赋值输出
# L' s( N7 o* \/ e) L5 g* ]      If Mid(strM, I, 1) Like "[0-9]" Then6 t  O/ Z+ [- f/ X. S
         strOut = strOut & Mid(strM, I, 1)
" z3 B$ b8 C: o/ J6 \      End If0 F2 T/ @: d" t% K7 X' B' f: K5 H
  Next I
) C- H' N# K4 P2 v0 x1 g  '用MsgBox函数进行输出测试" z& R$ T! i* `. ?" }) M
  MsgBox strOut" J$ S* i; o$ a. ]1 d
End Sub' q* n; S) q9 W7 n. c; g
    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)1 @1 r: y$ d& Z1 [! h

, f' n) Y" U$ E7 |0 M3 N) E(二)VB封装实例中VBA代码
$ j* ]9 |" ?. q2 j; G8 @6 S步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口
0 w( Q2 g, k2 Y2 K+ a* B4 [! i+ D4 F& v2 z& M! c8 Y6 M) T
# |" e& }) \$ x8 v

2 n, C' {  B7 t) X' e. o6 R
8 n! B, f& \- ^4 I) I# n$ t  j: H  B* c* T+ Y' b2 D
步骤二:修改工程名,这即生成的DLL库名. F6 V5 L# [7 p
* y. A7 O) i) @. R
- |' c1 O! _7 m, G9 t& H
9 p* A# M6 S+ K0 v$ [% E; W

8 p/ |  R0 r+ @$ u5 F0 m  }) z+ E4 s8 |9 Q1 w: D
步骤三:修改类名9 |% `& o( y, {4 K' i$ _" c
+ v0 D9 L3 e2 p) v: _

! g* j- H* J' H+ y/ V9 P& \& b9 v' i% T2 j8 c+ d

6 J# {0 r! T% Z: G) Y( Y" i3 f步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口
/ G! i+ X+ ^4 m/ j; ^
8 O" Q! |, Y2 Y; I; |, o% x. `% j4 n, o! d% T( ~7 t" l3 r
$ k; L1 a3 W- K% m$ o
代码如下- M8 y. [5 L' S& Z2 X$ q  G, i
'将这前的ACCESS代码改成一个公用函数8 b: H2 Q8 X: J; o
'输入:strPutString 字符串变量,需分离数字的字符串
% p( m' _. q; H3 Z: y'输出: fFindNumber字符串变量,得到的数字字符
7 q# t1 Z+ \; M' F9 b$ hPublic Function fFindNumber(strPutString As String) As String  B7 A% y6 J  ]" f& k
   Dim strOut  As String     '输出字符串变量& M" I$ a- J* t& x- p# E6 @
   Dim I" e* \0 ]- Z" Q
  
+ e3 d# X9 @' D3 h0 u* _1 S1 B   '从第一个字符向最后一个字符循环,以提取每个字符
- q9 Y3 J5 i7 `: k1 K6 G& @   For I = 1 To Len(strPutString)) W* T; M' }5 x' `% \4 b/ \
      '判断是否为0到9字符,是则赋值输出2 O  F/ P! E6 Q- ~) s% H
       If Mid(strPutString, I, 1) Like "[0-9]" Then
3 o6 N9 Z6 c. N" j; u! L4 @         strOut = strOut & Mid(strPutString, I, 1)
$ `( _6 |$ X$ B! |       End If  b& ]& ]7 {8 Y) q" v- e% P" `
   Next I5 r+ m( d5 X: A3 e( ?, w
   '数字输出
6 i! a6 \( l" ?! [% S5 ~   fFindNumber = strOut; b0 b5 k! W5 l  S3 p
End Function
1 B+ t$ u- C8 G
) u  ?1 H; G: a7 q# Y% |步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。
) C; C4 k+ H, Z8 \3 o% ]
4 n7 X1 s, u( Q# U6 {2 D" y三、        在mdb中调用自定义DLL动态链接库3 _9 X/ F0 P* G0 N1 H: a9 _- l

2 N1 i* q0 _: u% g% p(一)新建数据库及窗体
0 g2 w" g; K9 `新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
* `- h" @9 m' I3 K
4 [1 I+ q* y# D6 o1 T, `- y( a
+ d+ d0 c+ }$ _3 {! w  t" m/ Z(二)引用【我的动态库.dll】库# U+ ~) ~2 a! p5 `  d
按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。- b' r, u. y* T/ H* a
( s- F2 G+ Q0 ?

& L% s! F  B# D8 {1 D" {: d# j7 G! t
6 W. ]% b( C/ V4 j$ l, O4 I1 T# W7 b# C  |

' [; {" a" N1 q7 {, b3 R: p, b# z, ~" H' v. ]' ~/ J; E

' Y0 s8 N0 A8 `/ m8 {$ y6 p, k9 t; W% D5 D) [) s( M: ~- V  y: Y- X
5 B! p- H& d  Y2 e. ^4 p

' ?  c0 M) T  P. W. _) d3 _(三)在【CmdFindNum】按钮单击事件中加入如下代码。
8 u. m) z7 z1 f4 N/ D5 @( P) {Private Sub CmdFindNum_Click()+ ]8 ^; H( r1 M; O* u
  '申明自定义类
$ P( F  C  j& d( c: i! T  i  Dim MyFindNum As 提取数字
2 `8 c1 ]0 g, B) C: ^% {' H  Dim strOut As String
- J1 B% X0 v7 x1 p+ j1 ]$ ~  3 T& B& ]2 U4 {& X( _
  '实例化"提取数字类"对象
: x& i3 J  u# [/ N# g  Set MyFindNum = New 提取数字; C9 U% z- L& m. s* a7 S4 A- \' a3 b
  '将函数输出结果赋值给自定义字符串变量4 n, h' N% l  C
  strOut = MyFindNum.fFindNumber(Text0)  l" z3 ^" D$ u* D# L: J
  8 v! H+ q) i+ W0 Q/ y
  '在消息框中显示
' _% d" G" v- y  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
2 p- f9 ^3 ~2 m$ W3 ?End Sub
* ?  ^; O& N% m5 I
- L# _& J) A# Z6 r点击保存后,你就可以运行一下窗体测试你的成果了/ v; A5 Y7 S# ~8 ^5 O0 N# y- A
 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。) V: h. I' ^2 u& J2 P
7 O- Q/ z* D4 l% A1 z
0 d0 k% C3 F# Y0 @5 ?

VB封装DLL实例.rar

139.48 KB, 下载次数: 5

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif9 i% J6 O4 H' Z7 Y. N
VB封装DLL实例讲解(一)
# E3 M8 [4 ]# `% `- R
十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit5 v: [! w* g$ W& `, Y  V" t+ _
Implements SWPublished.SwAddin0 e/ V0 \7 Y) f# N3 S  N* O) m
Dim swApp As SldWorks.SldWorks5 }# R  F  ?7 F, \! b
Dim swModel As SldWorks.ModelDoc2
) i; p/ W/ L4 w  T- j2 IDim swCookie As Long; U  n0 x0 o+ [
Dim swToolbarID As Long
; z% e/ `" R, H9 k  o- t" ~; ?: p" B$ T3 x) e9 p+ m( j; D
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
& N# @- ]8 \8 q9 a   Set swApp = ThisSw
# V. V+ F0 L/ V/ P   swCookie = Cookie
- r3 b! ^* r8 h* ]   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie
+ m$ I+ Y! o. P/ v4 b4 E   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5
4 E+ W; y) z) o* p   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","
) x" x! u9 z( ]9 p- w5 c   . G6 }$ ^) A7 d1 y: U
End Function
$ j3 f: ~" e/ B6 w: j% e. J  gPublic Sub Block_MenuCallback()' I  _) `/ ?$ B$ k2 X0 q
  Shell App.Path & "\螺纹联结标准件库.exe"" |; ]% q2 w# K( |- C* i: K* o% t6 G
  Exit Sub
9 T1 q# Z, d2 S1 p, CEnd Sub7 ?: v8 k  F4 {; m  l: z% @
Private Function SwAppin_DisconnectFromSW() As Boolean
9 _& b# {& ^+ }' o' j9 d; w        swApp.removemenu swdocrart, "螺纹联结标准件库", ""; k) m* Q0 G. x( U
        " P3 w( h9 G1 I1 Y% {: X+ D
End Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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