QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2512|回复: 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 编辑
0 e! A8 [# C, C$ B# {8 Y1 V- s" h( d
VB封装DLL实例讲解(一)
$ F4 z& ]' a3 J- l: Y# w, Q2 j% ^  V/ c6 O% E

' N6 P3 ?$ l1 w7 y/ E一、        DLL基本概念
) ]( ?. J6 ^1 Q1 F) _(一)概念
& Z4 S3 V6 g: NDLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。8 u7 ~2 r. d2 ~9 I4 U6 @% n! J
(二)主要优点:: [* V$ \% L% Q- I( |1 b
1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;! e$ Q/ s% L2 H. ]
2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;
, m& d2 J# Q: w) J3、从ACCESS角度而言,还可以更好的确保核心代码的安全。
& O/ g7 V  u! `
8 o9 d4 T4 n, @" ~0 m二、        用VB封装VBA代码,构建自定义的DLL动态链接库
2 z! [! E% q% Q/ y7 q. S$ \" W(一)ACCESS中实例代码4 c0 O( M& e7 }
下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
6 \5 ^3 Z: _1 p8 K) j# r) Z我将就这个实例演示如何将该实例VBA代码封装成为DLL。
  E: O- C; L% v
1 K& a. b4 T; B0 H* v" s 9 k! z9 K( T/ B( @
# E( U9 V: A) d) G; Y9 O
 按钮单击事件代码如下:% k: L4 \# _% |: G# C$ i
Private Sub CmdFindnumber_Click()
9 Y) M5 P9 ?( M  Dim strM   As String     '初始字符串
. o9 z8 t' a) e" A  Dim strOut  As String     '输出字符串变量5 o8 |1 m, b: B/ l
  Dim I& }. Z8 b4 S& U: i6 m+ G
  ! a5 ^+ V; z, C+ ^, s+ y' N& y0 Z. }
  strM = Me.Text1
0 L8 u3 |- C+ N3 c, D'从第一个字符向最后一个字符循环,以提取每个字符9 I, b8 u" F8 Y9 s
  For I = 1 To Len(strM)1 |$ A, G6 o* a" ?+ E  ]
      '判断是否为0到9字符,是则赋值输出
8 [$ D4 y& R. U- v( R      If Mid(strM, I, 1) Like "[0-9]" Then
. w0 n. l% }/ n  W/ u* L! F         strOut = strOut & Mid(strM, I, 1)
% e- T+ p; i  P      End If8 ]/ z2 _, [8 e- N
  Next I2 K* y/ C8 C2 R
  '用MsgBox函数进行输出测试
- R4 a; T% O% u' V  MsgBox strOut
0 T' G0 Z8 Q- q" ?3 f- g+ ], VEnd Sub
1 @/ L" @+ a: n" {2 |    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)
; L+ q$ y' I+ F! e. `' P4 \% V8 M
(二)VB封装实例中VBA代码
% p' l+ S( x+ S% c步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口
4 `, Q1 P4 \0 ]0 P
9 U- q" m& |- j
9 B* H3 I/ x# {
. |5 t  Q& Z$ K9 s
9 W! L  `/ L+ x& G
0 T" z4 b9 ^: P1 p( \6 ^2 q% z步骤二:修改工程名,这即生成的DLL库名
, c* {7 E2 w  g) d0 m0 G
7 m  Z/ g+ W! Z, o! `& D3 u3 c  i, i4 w

2 E  q/ u- ~# F9 H# i  e! N( k2 R, \+ y- P* [6 D4 Z* c5 k  s
# `, \1 {6 |) o3 R7 L
步骤三:修改类名4 M4 V$ h) N/ C' l# O
, C, j9 B/ Q7 X) z

# p; R6 I, {( S( g: x! d9 ~' I' x" a( e% V& j+ `/ f

$ b+ n& e2 A% L: l9 P) W步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口
' U1 p0 Q2 Z8 c- }5 E
( y2 U* J$ S% y6 R- y3 P9 S/ t8 D9 y

0 S4 r+ t( w' m6 p4 a& v代码如下
$ z) i& ?+ S1 N'将这前的ACCESS代码改成一个公用函数
: U( i% K, F0 T4 ~'输入:strPutString 字符串变量,需分离数字的字符串, q- R: b: ^5 r2 x' z: l
'输出: fFindNumber字符串变量,得到的数字字符
% v+ n0 L2 {; `6 K* vPublic Function fFindNumber(strPutString As String) As String& q2 v# N- U8 W# w, |* |
   Dim strOut  As String     '输出字符串变量+ c- [, }: h! c( B8 e
   Dim I
' M8 p0 ]6 ?  W0 j3 \' K  
" w4 E; y5 j9 t. m4 t8 q8 `   '从第一个字符向最后一个字符循环,以提取每个字符
9 W7 b0 ]8 q2 E- V; B   For I = 1 To Len(strPutString)1 z' d1 i# t2 J4 S
      '判断是否为0到9字符,是则赋值输出) |, U5 l1 q5 L- s- A
       If Mid(strPutString, I, 1) Like "[0-9]" Then+ {& b+ v' f( y7 h3 ^% M4 j
         strOut = strOut & Mid(strPutString, I, 1)( X/ T2 I! A9 Z" [- r% R& G
       End If
  J' O. M  r" ~/ ?   Next I& H2 u7 I! I4 O$ n$ B& q4 z! `
   '数字输出
2 R$ n( v. g; _   fFindNumber = strOut" _8 }! T* c: h& r
End Function
* S0 w4 S5 T% ?, E' A1 P! T  G+ z
8 V/ Q4 q, v6 W! I步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。( v. B2 B4 ?1 V! {. d& g
' ]  |4 k/ A1 j/ u
三、        在mdb中调用自定义DLL动态链接库
1 W% I6 C- v6 l9 ^5 p+ F6 h& Y" ?0 k3 K; L
(一)新建数据库及窗体
) U9 s1 G7 W  A! a新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
9 Y  i! g$ B" M- d" n' W
% B) W& {+ d7 Y/ w( U2 p% k3 w( p
9 X+ ]- \: s& T: x: Q(二)引用【我的动态库.dll】库& ~- o2 D$ G/ A; a/ K$ F* T! u  a
按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。
2 I$ |- }/ |( y1 ~% g3 W% z6 ~, M  W- J  u3 V
$ N7 v3 [2 W) j$ V
+ s/ ]3 e- \: M2 b& B+ u

; i9 D* F) e6 L$ i1 h
6 G: a0 q* R) N/ o& Y7 I! _$ }4 r. o1 [7 X2 Y* ?1 s; O4 a

% z8 f6 g8 q5 I* R7 R9 @& I! C
! N% ~$ J9 R) z( Z7 V* `0 [! @( ^$ \
9 U( H9 u0 {0 ?( l  G* g! `
(三)在【CmdFindNum】按钮单击事件中加入如下代码。. G  r6 Y' @4 c+ @: G& a' Y) p6 j
Private Sub CmdFindNum_Click()4 F3 H/ |; M  X0 R$ J
  '申明自定义类! ]- H. j$ V& M$ W( P- r
  Dim MyFindNum As 提取数字1 x. E, [! o* l% S$ X5 @! N1 G
  Dim strOut As String
' |' u; D7 g. ]+ G0 ^6 ~. U  
, R9 V: P9 f" v% l8 O- w  '实例化"提取数字类"对象
9 A8 t; s% o* q  t7 Z- S  Set MyFindNum = New 提取数字2 z$ i: ~' _; p  I+ x
  '将函数输出结果赋值给自定义字符串变量5 n, p" O6 R2 B0 U7 ^  x: f  p3 k* O
  strOut = MyFindNum.fFindNumber(Text0)
6 e" Q8 E  t/ Y" n7 M  g# S  - N8 f- t4 U$ ~% f/ ?
  '在消息框中显示
& m' M+ z( K2 Q4 r) r- W$ E  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"( r0 t$ _+ Q6 x$ i/ I) e1 `
End Sub6 N$ s% z2 z7 [+ b

) I2 Q" ?5 Z& G+ w9 o点击保存后,你就可以运行一下窗体测试你的成果了
: x2 O5 R. |* S, B, ` 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。8 o& c" F3 [  [& P! [: y
% M6 z+ s8 Z7 D$ B* ]

/ F2 c. J/ d1 X- Q, G

VB封装DLL实例.rar

139.48 KB, 下载次数: 5

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif3 Z2 C: W! |& c  s
VB封装DLL实例讲解(一)

$ w( B- w! V6 S9 Z, v十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit
6 k+ G: y. R$ w* G5 q% c' iImplements SWPublished.SwAddin
7 ~* k4 k7 B9 j: q2 w+ XDim swApp As SldWorks.SldWorks
& l4 L0 V# f0 c. Y6 ^: oDim swModel As SldWorks.ModelDoc2: c; l1 Z; b( L& N
Dim swCookie As Long
/ [4 n: M8 M1 _Dim swToolbarID As Long
9 h' p9 i6 F. m( o  G1 r
/ j2 Y* H. G0 n- j* y$ dPrivate Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
9 a8 t0 ^0 q/ I, Z: X9 E, N   Set swApp = ThisSw* r) \) Y6 Z4 t- M: N* ~& y, ?7 U0 T- T( O
   swCookie = Cookie
& L* b( P- ]; D* E# o+ J   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie* z: e( m+ q% W- c& ?; v! t2 j
   swApp.AddMenu swDocPART, "螺纹联结标准件库", 56 w) G) c6 D4 j: E# [0 Q$ y3 o" J
   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","" |5 d- q* J0 x# U" `- \* G
   & C" i* L9 J. u( b) a1 y" C, v
End Function0 ^3 T' P+ [7 w  I* Q: I/ s/ v
Public Sub Block_MenuCallback()9 U/ u% S( g0 d4 ~
  Shell App.Path & "\螺纹联结标准件库.exe"
) D9 [" C: s3 H* L- F* W  Exit Sub* [! w1 H, F& Y4 S, M
End Sub
% p6 E% L& M2 _* p+ M. r2 B. NPrivate Function SwAppin_DisconnectFromSW() As Boolean$ v$ ^3 }5 A& [+ e
        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
9 M8 m+ x4 l1 V          ~  i7 [9 \& c6 s$ n) X; }8 E
End Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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