QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2404|回复: 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 编辑 : m9 _7 Z# z, Z- ]8 r& K

6 D) i  |' z+ h0 i3 f6 v) \. O# c) M6 wVB封装DLL实例讲解(一)7 @4 h- o8 z% o
( l3 E- E# e- O1 X6 ]+ v! w5 p

; ^7 H- p: Q5 x9 B) G3 z% d一、        DLL基本概念
' F3 P2 Q! t8 ~. E( s! p! u(一)概念$ A& A- i7 M' u
DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。
& ]! s' G. F2 {- [(二)主要优点:3 j1 D8 p) h' a
1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;4 Q7 b* R, B; V5 E% q. O
2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;, c$ ?' H7 N4 Z  U+ l1 a
3、从ACCESS角度而言,还可以更好的确保核心代码的安全。
' s* _1 @" Y/ W, O2 j2 c0 Y* r# c, k
二、        用VB封装VBA代码,构建自定义的DLL动态链接库
1 E; q# p4 P( e; T(一)ACCESS中实例代码
8 f1 K& q& I5 i" \8 l! M1 v下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。2 N! \6 \$ Z  C9 I  y3 d+ S
我将就这个实例演示如何将该实例VBA代码封装成为DLL。# z* L- q" a! w; Q- `, [

. P* G% \3 u3 S$ v, M
8 O, i4 ^/ _( j. s, T
. l6 w2 b: @- N1 U6 Y  |0 B 按钮单击事件代码如下:. I& v% I( q4 J0 f/ A
Private Sub CmdFindnumber_Click()4 l4 ~6 T% T) G) l6 Y
  Dim strM   As String     '初始字符串
! r' x. f0 l7 g% G  Dim strOut  As String     '输出字符串变量
' y' \( r" k7 S0 u! j& n) o  Dim I. D% k  z) L4 e' ]- _- D6 n0 Q
  
% J  n5 m) u9 z& i) g6 S  Q  strM = Me.Text1: ]" c# x6 O6 Y8 z4 I# o
'从第一个字符向最后一个字符循环,以提取每个字符5 S& }$ J6 Y0 ~4 E$ J! }8 F
  For I = 1 To Len(strM)" T9 G5 |6 G% E& e- D
      '判断是否为0到9字符,是则赋值输出* M: ]4 R; X: m- S5 C  G2 |1 J
      If Mid(strM, I, 1) Like "[0-9]" Then* y3 i- M5 @" \# P" f9 ]9 }
         strOut = strOut & Mid(strM, I, 1); Z* a7 V7 K4 h$ L% |9 U
      End If
" a. s1 N- A$ @7 g  Z! q  Next I
% L2 R  v8 l! w2 @( h  '用MsgBox函数进行输出测试7 V1 ?; b& K$ E/ i. w7 w  i, |
  MsgBox strOut; R- t7 I, d. U& |% p, K6 n; \- ^
End Sub3 d" r$ t2 I1 Z) H$ ^! m/ c
    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)
- E9 I; P6 y; ^  l" a) }* }* F0 T; j* {
(二)VB封装实例中VBA代码
- g4 S8 D1 l" m5 K+ e步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口
9 H: T! f: u0 ]4 Z+ ]/ ]+ S0 N; e' u8 e: |" `* C. W

) m+ {- s# d: ~1 w( G: d$ C8 i; ^: K( O4 j3 h- ?" \

1 Z+ R& G" R, k
& O( |9 B1 W, g步骤二:修改工程名,这即生成的DLL库名
7 Y- q8 O4 C( W" W
3 v8 r1 W# T& X9 ]8 U
# P, T4 k1 s9 ?( i& x0 e, {$ r! D) j* ~1 W2 }: C5 Q" s/ V

& b8 o; S- Y# R/ Q
1 f7 O( S; L2 E8 T步骤三:修改类名5 B9 \6 T5 n9 v- `% O
4 f! \; [" d6 e0 Q

. C. P* n. U; r4 j, s% P) |& L
2 Y  y1 e, \- l' y( p& X& W! C0 K6 z/ _$ w  S+ M: p, Q
步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口
1 P8 n, f2 G- M# A3 I- d' N5 Q
! X. A, K1 f# D" l8 D3 v& i5 |
* j9 y; B) ]% p( d9 |
  d2 w% u3 y( q8 `. b代码如下7 t* ?# b8 |% `+ b2 w
'将这前的ACCESS代码改成一个公用函数/ {# z& {% u6 T7 d
'输入:strPutString 字符串变量,需分离数字的字符串: f8 U5 l' y$ p" q6 t: a: [3 x6 [1 C
'输出: fFindNumber字符串变量,得到的数字字符9 E6 p* Z9 S) C
Public Function fFindNumber(strPutString As String) As String2 H1 T4 _* ]& W* o
   Dim strOut  As String     '输出字符串变量  }4 S: V' e  V* ?' V
   Dim I- X7 m/ e6 A: W) B
  2 Q: f. u: b0 H. a9 n! P
   '从第一个字符向最后一个字符循环,以提取每个字符
, p8 e% C0 I3 q   For I = 1 To Len(strPutString)( J. v! @, x# W$ a1 Q
      '判断是否为0到9字符,是则赋值输出' L6 o( n; Z4 A1 w, L6 u$ W# e
       If Mid(strPutString, I, 1) Like "[0-9]" Then
" l% i6 k# d$ }  e, ?; h5 L* ]         strOut = strOut & Mid(strPutString, I, 1)
/ n, H9 C" N0 |5 k, x! B       End If4 B: K) k. D6 W' u0 D- o, n
   Next I% f+ M+ g' e/ i5 {% S3 l
   '数字输出
7 m2 R& u8 f$ G   fFindNumber = strOut
+ d& W; M/ m0 _5 X; P% _; VEnd Function5 T, ^# o' D( j

: }2 i$ b* x! T9 w" h0 ?0 {0 d步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。
/ [& `) j7 _, c& l- d4 {! N/ p6 `# J7 F. ^& P
三、        在mdb中调用自定义DLL动态链接库/ I4 f! @9 L& I+ R1 h

, K1 K2 V1 v# g7 e1 V( }6 D3 T# Y8 Z(一)新建数据库及窗体
) q: Z/ w" j: o9 X' [) b新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
. S' Y: d% y' q6 T+ v1 a3 Y
3 F1 Z* F  P9 {) D$ T/ K8 Z3 [; D5 \( l. g7 U
(二)引用【我的动态库.dll】库
/ Z- p2 z6 T. x' b! b按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。- M; P, Q) o' P' ~+ m! y+ S9 C3 y! `4 U
5 m' j* U7 n/ @4 n5 s5 ^
' H+ t2 @/ \- w" _: K6 \3 @  L

/ B( K* b. U3 M* p6 C4 ~6 g2 y# u- z2 A3 R) a1 L9 ~

& ^9 z4 D8 Z$ D! Q' R, Z- d7 `- A! a  u4 `  f$ e/ v: J, N
0 J0 w$ `0 Q: r* F

# Q/ h$ g" D4 I2 [! Y) V! a" U, K3 L, R  R# i6 Q2 \
! s3 o0 ]- m+ U8 U- \
(三)在【CmdFindNum】按钮单击事件中加入如下代码。
5 K, C* [* B9 y* t0 J$ i: k6 hPrivate Sub CmdFindNum_Click()5 r7 c/ y7 }* T( n
  '申明自定义类: {; u  b9 U0 Y7 q! n, y% ]
  Dim MyFindNum As 提取数字
2 |8 X4 F' }1 W; y$ H9 u4 ]1 v# _  Dim strOut As String- m  q% ^" p$ m) J+ p) j, W- n
  
  x% k& f+ c2 g& ^8 [  '实例化"提取数字类"对象
- F8 n. O% r8 ^( {/ H  Set MyFindNum = New 提取数字
+ e: H& O- W% c) {7 W9 E. ]  '将函数输出结果赋值给自定义字符串变量4 t( |/ o( X) c+ z
  strOut = MyFindNum.fFindNumber(Text0)  |3 E  x* @, J; i* j& g
  ! a. X# i; h6 ~
  '在消息框中显示
6 y) Z( S+ I- ]3 f3 B  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
  Z' B+ C8 z8 M5 A$ j9 Y) j9 o7 @$ bEnd Sub
6 }0 V: J! Q6 Q" s6 L
2 Q* P$ W. n4 p  Y4 N6 ?2 c点击保存后,你就可以运行一下窗体测试你的成果了% H: O, f$ w8 I6 O
 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。
& e' O" n; ?/ @: E; j# B: H: B1 J  Q3 o: m+ G

0 g9 }# `5 `' o1 t* O+ ?

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif
# o8 }/ j( T# N/ i& ?/ t) ^VB封装DLL实例讲解(一)

' M6 W' @7 Z; T3 L4 p; f5 J十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit/ C# b2 w. U) w2 a) j
Implements SWPublished.SwAddin
! S5 v! T4 U2 _6 K  HDim swApp As SldWorks.SldWorks
3 G2 o% c  k" V/ Q- M: B0 c$ ]. XDim swModel As SldWorks.ModelDoc2
1 M  m4 ]0 ~  i* aDim swCookie As Long2 c0 L- _: w- b; T8 ^2 s
Dim swToolbarID As Long) O& q' S  R! A4 Z, e
& Q/ \+ Y% _% e/ C
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
1 k4 u& S0 U! u" j1 H& L  `   Set swApp = ThisSw
) x& M& X/ I- s$ G' j& A9 w: v   swCookie = Cookie
, p/ _) Q4 {! |0 w   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie4 M- p. _* M5 w8 O3 B6 W6 q
   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5- x& {+ k/ u1 X
   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","" N" C6 V5 y% j* Y
   + u" S% u6 e1 S+ b. A; F- X' Z
End Function
1 F  g+ ?. F2 }) G! ?; mPublic Sub Block_MenuCallback()
  I2 i$ I% o' d' o, m0 u5 N  Shell App.Path & "\螺纹联结标准件库.exe"
  K6 D' F8 V; W4 V* `# Z  Exit Sub
) y# e3 a& y3 I8 F. d6 dEnd Sub
) @- _) ^; Y: o( f' ~Private Function SwAppin_DisconnectFromSW() As Boolean
- K  q+ @5 o4 C6 R5 {        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
) K2 f3 L6 X/ _, m/ o% M        
' h- l; I7 K3 TEnd Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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