QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2405|回复: 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 v* o: t6 W* j' {9 x8 w, N% L) H. C& j" A( p6 {5 b9 o" C( ~
VB封装DLL实例讲解(一); o6 d6 {5 O0 |2 k' Z

& I- Y, O6 i9 O& t
! u* J" M8 H9 {2 ^一、        DLL基本概念
1 l, W1 E1 F( \! e(一)概念, ^5 Q0 q, W0 y5 k; j
DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。
  {3 ^2 I) B  A+ r: A( B' n  h(二)主要优点:
% u" H' X* m/ k, O9 _. B6 p1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;
1 l' J, S: Y" o9 q. P- y' {6 B9 m2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;
" s( q+ R. T6 y- O8 ~  G! Q- l3、从ACCESS角度而言,还可以更好的确保核心代码的安全。
+ |% W2 C! B* W3 j
/ o7 u" t8 q" g' g3 ?: P) b* b二、        用VB封装VBA代码,构建自定义的DLL动态链接库
6 V1 ^% K2 c% i8 R  g) G(一)ACCESS中实例代码
2 [+ w# z, Y) J) Y下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
1 x+ J' }& Q1 |, H8 U2 E! H我将就这个实例演示如何将该实例VBA代码封装成为DLL。! Y( P3 D) i, H1 y5 q" N( O/ E

6 t% Q9 P' b) B) C9 h
1 V9 E: b+ P8 A
" ]' Z* f7 x+ M% I: u6 H; s 按钮单击事件代码如下:
3 {$ D0 w! {! d% @! |! z' \Private Sub CmdFindnumber_Click()4 R: j$ g; E: n+ J* V
  Dim strM   As String     '初始字符串
6 x$ l& s! p0 P/ ]' G  Dim strOut  As String     '输出字符串变量
% k0 g6 S  @! M) Q# ^1 k  Dim I, P: j6 s( @1 I) y5 q
  ( U' Y' v# W$ n5 V/ H# ?# k* W
  strM = Me.Text1
; `9 ]" k6 A* T'从第一个字符向最后一个字符循环,以提取每个字符# V9 F1 F- I3 _3 d8 N
  For I = 1 To Len(strM)& I% H! {0 p& z; G3 T1 J8 b- l' W! d
      '判断是否为0到9字符,是则赋值输出1 ^6 _! N9 Y' l
      If Mid(strM, I, 1) Like "[0-9]" Then
: Q3 z5 r& }/ r" n+ q" a         strOut = strOut & Mid(strM, I, 1)
# d8 E3 x" q$ g8 I) D: x# v      End If/ u) u( K, c7 b) e1 c* ]% ~% v7 M
  Next I
: |; K) z4 k4 E! X; y  '用MsgBox函数进行输出测试
  ]4 u; h3 M2 W9 O( v8 N  MsgBox strOut, p& _, _. ~; n; |2 D% j
End Sub8 P4 |5 M; t1 m+ M9 }
    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)
1 P! `. T$ A! g4 j7 O: P! Q1 {# M( w7 G$ n( H
(二)VB封装实例中VBA代码$ l% Z3 i! m$ ?
步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口
' ^2 A' T6 r  O3 L+ v5 o1 T
: m5 r( W9 k' E8 d/ O% q. B1 u' L) ?8 u0 Z2 C

+ z* G# t/ j- w1 O. a# ^/ ^  Y0 @  f" u" L7 |  `+ k

  Y3 [/ ~/ A4 a! C/ L, \步骤二:修改工程名,这即生成的DLL库名; W  Y- O& k$ m" d5 }
. r+ [6 n" f9 K, B/ y3 Y

. R. T3 |9 r, }
2 J! y0 `! m0 g4 E
1 b- `6 v8 @' P% m+ _& l8 _
1 n+ k9 c; L, x6 Y- y! r/ I/ `步骤三:修改类名. Z! B: |: [( X: f3 ?

6 P4 q/ H7 v: q, r7 S' g& B5 q/ a' I3 Q! Q

- u3 S. L8 T, V8 x
, G* f/ a0 p) }8 `步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口9 v) b) _3 c& \# ?, k

. J9 ?# N% K0 W( ?% a$ R0 l
. b) B0 }- w& L# G& O
6 _, E5 U( F3 X' R. @0 ?7 K代码如下
2 ~) v' \/ i# m+ t' B'将这前的ACCESS代码改成一个公用函数/ |: C* E+ Y9 Q% E2 j
'输入:strPutString 字符串变量,需分离数字的字符串) \6 G2 }* u1 H: i. C' u2 u
'输出: fFindNumber字符串变量,得到的数字字符. M" \7 |7 K0 i) j9 q
Public Function fFindNumber(strPutString As String) As String* _: c9 v$ Y- H
   Dim strOut  As String     '输出字符串变量& M0 f+ k6 l: T5 Y6 i9 Y
   Dim I% y/ T9 K5 w, c" m: s* n$ X5 J
  
# ^% o" k" s. p   '从第一个字符向最后一个字符循环,以提取每个字符" W" W3 F( i. ~
   For I = 1 To Len(strPutString)
. j2 r) U" R0 r) y      '判断是否为0到9字符,是则赋值输出
3 q  l# \9 P1 Q0 a6 G       If Mid(strPutString, I, 1) Like "[0-9]" Then6 t$ e- \7 c( t9 I. g7 f: p
         strOut = strOut & Mid(strPutString, I, 1)2 O5 {1 }1 j- A) }4 a, g
       End If
0 Q$ `+ f* ^& A, e, U   Next I
9 r5 w% D' ^. q0 r$ j   '数字输出
& u6 e7 @# e/ X7 Y9 X8 H   fFindNumber = strOut7 S) U3 ^6 L& Y; H4 p
End Function6 T: y% e4 O  q

/ |3 c5 B* p( t9 W4 a4 O步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。
/ g! A# P& n# w" U2 T# x- N3 w+ p. K, y% U3 O3 M3 ]. P$ U# g! p
三、        在mdb中调用自定义DLL动态链接库4 d- K7 V* Q  C. _+ q6 I8 e
1 o' ]/ P3 ~0 H9 |5 M
(一)新建数据库及窗体- y+ k+ R- m$ j- X, e% Q5 }( [
新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
. B' P9 v! T% g8 ]( Y
( a7 X/ K4 {' a, H6 s  s/ q
  @+ S4 x3 m( n/ i0 u(二)引用【我的动态库.dll】库
/ J; ^& G! a3 u; N. M按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。
' I" K& F$ \; _* w& S& X# ]  k- Z; Z4 T* K4 v
: m( i. s% ~; K& S9 A
; |2 e; C4 [5 `, G' v
# W% K( A1 \1 C8 F' z0 l9 h
7 f# ]# b3 ^* d8 W4 q  l

0 u( n) \  a  ]% f* x; [! Z) y4 Z$ q# h' ^6 b

$ ?0 K1 A, O6 j8 `
0 a0 h7 _* Q: g  V4 {% D& J! J+ w5 w* \# O
(三)在【CmdFindNum】按钮单击事件中加入如下代码。9 b* I- D( b, l$ ?7 x2 q
Private Sub CmdFindNum_Click()
5 [0 @8 e4 S( y  }4 w- d' w  '申明自定义类
. s8 N, K, P& @( [  Dim MyFindNum As 提取数字
9 Y, X. g6 I6 f  Dim strOut As String& `+ o9 a8 o! e, }7 G$ L
  
3 }, K3 C1 |8 G$ D, C  '实例化"提取数字类"对象( s$ a3 t* l2 l. g
  Set MyFindNum = New 提取数字" r8 v5 S7 D( ?
  '将函数输出结果赋值给自定义字符串变量3 L, F6 M6 X1 v9 \0 {, [
  strOut = MyFindNum.fFindNumber(Text0)
& @9 D; s9 s9 G- I2 r$ {  7 m- @' `7 T3 e/ i
  '在消息框中显示9 P- O0 X) y2 B; c" F
  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
8 U5 G# y7 z% \! s0 m2 eEnd Sub6 [- D6 f3 T# ^* W2 M/ O

  J( Q& }6 D/ t点击保存后,你就可以运行一下窗体测试你的成果了
" S$ K3 i7 `' ]0 C+ [4 O/ w1 E 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。' Q7 c: B2 J& C3 V$ f

& o/ D9 t7 V7 \6 b3 m) A
: @1 `% [, n4 H: U* z0 |

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif- B8 |* n( N- }$ `; m; ], i
VB封装DLL实例讲解(一)

8 m# t+ g  ]: X/ |7 V- J( }十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit$ L9 h" E6 b: O3 ?7 Q8 i
Implements SWPublished.SwAddin+ `  F8 n" w5 z- R+ V/ x+ V& L
Dim swApp As SldWorks.SldWorks
) y5 i; V  S8 c. oDim swModel As SldWorks.ModelDoc2% b' f% S+ w0 v9 I) d; H$ S5 r
Dim swCookie As Long. S/ N: J% p: Z+ `4 {/ n# ]2 g
Dim swToolbarID As Long& Q" N5 T3 l6 E( d  w3 f3 m7 m
% P- O3 _5 ^$ h% U
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean: P8 W* v4 y0 V0 i" C1 i
   Set swApp = ThisSw: z& M. Q8 f: y  Q
   swCookie = Cookie
1 w1 I( ^4 o! V8 g' h   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie
: |" T% ]0 A4 |. h   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5  H: Y% e+ y& v7 E
   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","; H* b/ e" f. x6 e5 Z. J- m) j
   & r9 j3 t4 Q0 {% |8 z  R& G" s
End Function, H4 P& A9 A8 n8 B: l
Public Sub Block_MenuCallback()
6 _" ^1 K6 r3 ^  Shell App.Path & "\螺纹联结标准件库.exe"2 \* l" q$ m" {
  Exit Sub
. M6 T7 i4 B5 F/ b( r+ QEnd Sub
% a1 d7 ~2 \% zPrivate Function SwAppin_DisconnectFromSW() As Boolean
6 e6 Y# n) J% Z9 I8 t4 l+ L* }        swApp.removemenu swdocrart, "螺纹联结标准件库", ""! G* t! q5 j) Q0 e- p
        7 N' s3 P* l6 n2 R4 h
End Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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