QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
14小时前
全站
goto3d 说: 版主微信号:caivin811031;还未入三维微信群的小伙伴,速度加
2022-07-04
查看: 2199|回复: 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 编辑
) B7 J) l& U& i' R* s: y# L4 B% Q9 g& ~' X
VB封装DLL实例讲解(一)* t: a$ J2 w- o# G6 D) t/ Q

3 W1 b8 f3 Q, _( V0 `& ^+ p) E
3 K. F, `8 I8 h) P+ A8 F一、        DLL基本概念8 [  a( b7 U# R# _* b8 y" o
(一)概念, A) d! ?- b4 k" h5 @/ C
DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。+ R* t" P. L# t, M
(二)主要优点:' @) ^& r, i8 }) F" d0 q
1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;
! j2 ^% z: Q/ W- q4 J2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;
+ M+ m( e. |. u, c1 j3、从ACCESS角度而言,还可以更好的确保核心代码的安全。
) w" |( R2 m# G, K$ [. l3 ?3 x
* k1 v7 Q! O' L* g" m. Q4 l二、        用VB封装VBA代码,构建自定义的DLL动态链接库
9 C3 v! H* Z6 r* ?9 g. D6 {(一)ACCESS中实例代码- P3 K( E5 V0 g& c* V! V
下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
* X. k% W* J  s0 v; I$ o/ ~8 N我将就这个实例演示如何将该实例VBA代码封装成为DLL。7 k  n9 I# Q& ]& J1 f5 P

# n* |8 S- ~) T& Z/ M5 D
* b* i9 T8 q* W8 O
4 j' u: M" I2 P; ? 按钮单击事件代码如下:
8 ?, x5 M% k+ Y4 W6 W) bPrivate Sub CmdFindnumber_Click()- s5 d2 a& W$ }7 R4 e
  Dim strM   As String     '初始字符串
* I( @8 ^! ^, h& k( `  H" ^  Dim strOut  As String     '输出字符串变量
9 Z+ b  k3 B- I5 k2 w  Dim I7 Y. [$ ~- ~8 S  a
  # F! a7 ~) Q5 j
  strM = Me.Text1- p2 }( c. m: z( N
'从第一个字符向最后一个字符循环,以提取每个字符
1 x6 g7 i$ h$ j- p' `5 q' }! H  For I = 1 To Len(strM)3 m; x" K2 [. h$ ~, B+ d6 n1 [  v  Y
      '判断是否为0到9字符,是则赋值输出
0 M* x: j5 X) ~* V5 V      If Mid(strM, I, 1) Like "[0-9]" Then$ g; N( z0 a# Z( M8 S. G5 l
         strOut = strOut & Mid(strM, I, 1)
; S, g% K9 ~; h' `1 R6 Z7 G      End If
4 J! G7 ?/ B' W9 q: c& a: O0 V6 i  Next I  C3 f6 P/ h: s1 x% f; Z
  '用MsgBox函数进行输出测试
8 {' y9 s; y; Q) V8 n0 f4 n) O  MsgBox strOut% ?0 z) k% X! L: A5 r- J/ Y
End Sub
( c. D. ^) z  d' g8 n5 m& v- W# W    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)
$ D. F/ x# ?3 V9 H1 G4 c! H+ a$ h- T
(二)VB封装实例中VBA代码
( Z1 |  X: ^" Z# _% p步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口
, ~, h- f+ ?/ O. y5 z  q) x3 S% X) f! T

9 k' Z- X3 A2 @3 n' e$ `' g& g  d5 ]$ y6 k8 V# J

1 K( F  R0 k, [, l0 J( d5 M8 K' b8 i# B- ]6 p  R4 @+ Z1 l3 ~
步骤二:修改工程名,这即生成的DLL库名0 ^! ]' A# o& R+ U2 L* e

- j& f; Q9 ]; F; C+ k7 `
, _. U) Q& Q' L: O) v2 O+ C5 R  k  [5 ?6 H* R
8 y( ]/ v: _5 a+ W3 _6 D9 X

' w; O% v1 E4 [& Y* L5 n: ~步骤三:修改类名" Q% g/ M( w$ S- U3 k) c( L

, |4 r/ T& a. r! V1 ~3 |2 t
! H* g" h+ j* D# c, {+ ^& e
6 ^* ^8 y* g5 l/ M+ U/ e& f* u, B) k$ e) c; j5 \% }1 a
步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口" J( L& Z" [: y" v; o% [: w
) L9 R5 Q" `) N. \3 s+ o! n) Y5 F

! d. }" D7 e1 Q) r9 V. x+ t; c
( w0 S4 G* c, O' a代码如下( t5 t$ C' u0 v, q) u5 e0 R- ]
'将这前的ACCESS代码改成一个公用函数
. M0 X3 r+ e( O'输入:strPutString 字符串变量,需分离数字的字符串
( A: M; e& l$ U0 ]- F- F5 ~8 i'输出: fFindNumber字符串变量,得到的数字字符& L" [$ N4 V2 ]! E* h
Public Function fFindNumber(strPutString As String) As String# j& b; d& Q. j9 m9 |: S; b
   Dim strOut  As String     '输出字符串变量
( J0 O$ o% Z* k. d   Dim I
1 v; f* z2 i% {2 U  ; l5 e; r% w. w# [! \; Q
   '从第一个字符向最后一个字符循环,以提取每个字符- P+ S2 _' g' V
   For I = 1 To Len(strPutString)
3 N) f$ `0 i% n5 n      '判断是否为0到9字符,是则赋值输出4 i( ^" B( J! F3 [/ a
       If Mid(strPutString, I, 1) Like "[0-9]" Then
! {# l% ~* M1 K) F% V9 g         strOut = strOut & Mid(strPutString, I, 1)' S# n& ?3 x! R7 X
       End If
% k) C. J7 [& Y   Next I
: W% z7 g! N: K& S8 T   '数字输出
1 v8 S' Y9 K& o2 f, R   fFindNumber = strOut
2 _1 H) i2 g  R  wEnd Function
: D- ~# P+ y/ @$ q) w5 C: ^# P3 j! w) F/ y: H5 X1 V
步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。. z& o, h7 U' V
+ A% C9 w8 ?# v- Y0 r: v3 X
三、        在mdb中调用自定义DLL动态链接库' a) k/ d3 m" H' U% }8 d+ f

! Y! c7 V$ `3 n(一)新建数据库及窗体1 T$ \, T7 R1 N1 k( |
新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
( x1 p& v. v$ K1 W! g  r0 d0 _/ _+ l" j

' e5 Z9 g9 {" B5 b2 C& p8 y" [, s(二)引用【我的动态库.dll】库1 L4 n5 h+ T8 x' `
按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。/ q- C% P" ~2 g. C: N* |/ K, U2 o9 h

: b- c1 a9 H. E- I8 t
- T# @- E9 z7 ^& v
3 ^8 c; K. m- U, e+ j* u2 A
9 Y6 H+ |9 \$ p2 \2 P6 s; o$ }4 E# g1 j/ Z! p
: Q( J5 m$ X+ g* z& C# t4 ]% {2 X
9 C& u3 n0 W, `3 k/ R0 [4 ]6 J& B# ~0 V

" Q; X! k: E6 h) Q  H0 g5 N9 b+ I6 a) k9 I# u3 R

9 v& o: l2 v' u(三)在【CmdFindNum】按钮单击事件中加入如下代码。
& K" n2 h3 J2 V6 S- l  c9 QPrivate Sub CmdFindNum_Click()
2 y1 J' g% z1 b' b) h! }" R% }  '申明自定义类
0 s' u: R* g( \" Z, w1 p% a) F, ^  Dim MyFindNum As 提取数字
, F% k* P) x, G1 `  Dim strOut As String  _; X8 `/ O+ t  }" }& k
  ; n* Y* n9 C" r; t' x
  '实例化"提取数字类"对象
4 W& _, \" Y, k5 z% J' w. N  Set MyFindNum = New 提取数字2 }) N. P5 L, W5 J
  '将函数输出结果赋值给自定义字符串变量
  G2 n8 G" J$ D8 q; [* @- c  strOut = MyFindNum.fFindNumber(Text0)1 `* X4 I7 l, d" b  C( O1 Z3 d2 w, `
  5 j) q: @; h$ r. q7 R- S. O
  '在消息框中显示% _# F* B+ w* I5 v
  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"$ I+ a3 d5 r! F; [
End Sub
3 G: `' u8 a0 v' x. X( M0 r& _7 W/ _5 i) C$ A: P& G
点击保存后,你就可以运行一下窗体测试你的成果了$ Y, y0 c) j( |1 H. f4 n
 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。- F( I* r0 H2 y, p
. t4 A) }9 P+ T1 d/ M

2 P! X% p* J+ ]% K

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif$ O' m+ u) X4 t% q- B
VB封装DLL实例讲解(一)

' V0 j6 k( H5 x十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层
Option Explicit) Y; v$ T  Y5 ^5 U
Implements SWPublished.SwAddin
" \" Z. ~1 N$ W3 O8 j7 Q/ bDim swApp As SldWorks.SldWorks
* b+ o; G* j7 sDim swModel As SldWorks.ModelDoc23 L8 v  u& ~! A1 a( e8 G
Dim swCookie As Long
5 O, v4 e0 r4 |6 W  b4 g  B, rDim swToolbarID As Long
& z& g/ a5 _4 k: a4 L2 L: F6 b( |* ^/ x; C/ c2 Z3 X
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
$ F# r# h% L8 v   Set swApp = ThisSw
0 ]+ e; D. y8 t2 X: m/ r/ r   swCookie = Cookie& _( n" D' C7 E, |( V
   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie
' O: P; c. C, B6 A7 L9 A, f$ ^   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5' x! m, ]5 r* N7 A# n
   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","9 O- Y: ~1 }! m3 V- m- Z/ T
   
- E- V& ~4 a$ E' O$ s  cEnd Function2 ?  i5 }: f5 H8 T6 _
Public Sub Block_MenuCallback()6 z( z( A. D# ]3 u- b9 O0 A: |" j
  Shell App.Path & "\螺纹联结标准件库.exe"
! Z8 `3 s4 V" w  Exit Sub/ ]7 F) S: z7 _" z
End Sub
1 h" ^' e+ C: lPrivate Function SwAppin_DisconnectFromSW() As Boolean
6 U, R$ H  F+ U4 e4 W, F# O* s        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
& Z: r8 a+ x  F8 B6 F& i5 r        
( h5 k/ [5 W8 O6 z, SEnd Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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