QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2506|回复: 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 H  X5 n, X# o! n, `( M
* x" [1 J! g1 o- e' g& P0 O6 Z
VB封装DLL实例讲解(一)
4 J$ W$ `6 j, ?/ w: z5 J0 y9 `5 \' a  |3 z+ F1 C# j

  ]6 c+ u: L4 ?  X. I6 y3 u一、        DLL基本概念5 X# c3 I( t& P# q4 E0 K. X9 v" c
(一)概念
4 G0 j. r' L# _5 CDLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。* X7 Q5 S$ @; i0 t
(二)主要优点:
9 ^% c, U) d* O6 n/ `* i1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;" S( S# |! G, |' r6 S; f
2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;
6 |( ^) K! y- x# ?3、从ACCESS角度而言,还可以更好的确保核心代码的安全。5 i6 {" v5 z+ `: r

/ W3 l- y5 z6 F, {2 |# q7 e9 e! q二、        用VB封装VBA代码,构建自定义的DLL动态链接库
6 D. |3 R7 ]: o" s# r- `  Y(一)ACCESS中实例代码/ O* p' ~0 h' J6 ?; O
下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
# J. d5 y) D3 B  `7 J我将就这个实例演示如何将该实例VBA代码封装成为DLL。
3 Q' d8 [3 K! r/ u) U* e6 h; R 2 t" ]; p% M; J8 S+ G
3 g, P  ^" @3 p  ^1 k2 d2 t
/ Q6 Z% n1 C- |5 G5 l$ X  q
 按钮单击事件代码如下:6 k3 j5 R- d' e+ t$ s, u+ g6 X
Private Sub CmdFindnumber_Click()
6 M: s; L1 `( {! g  Dim strM   As String     '初始字符串6 E; w0 K9 |' e0 |" ?$ _: `1 y
  Dim strOut  As String     '输出字符串变量: a% l$ K; v4 {8 ^0 S! p9 O' ?0 D
  Dim I4 M9 @! h" ?# }" V0 z
  6 {7 ~. Y8 K: ^% q
  strM = Me.Text1. Q2 w& Q: Z: e( s9 S
'从第一个字符向最后一个字符循环,以提取每个字符
8 @  A0 h2 ~! c+ [, A  For I = 1 To Len(strM); q5 @4 G4 r- w" E& ~" x* }6 B
      '判断是否为0到9字符,是则赋值输出
: z; f2 g7 i& I      If Mid(strM, I, 1) Like "[0-9]" Then
' {3 u" p: _( l+ L         strOut = strOut & Mid(strM, I, 1)
* X# z- R1 n+ n6 c      End If$ `2 ?. M( t9 }1 p* `$ U
  Next I
9 k0 H1 R  Q. n0 P8 L  '用MsgBox函数进行输出测试
, h" A' W  c( J$ V/ _  MsgBox strOut
0 T- }* y) }3 L& A+ V2 r. p. ^End Sub( A  \5 l9 K4 w* X4 U
    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)! ]9 X3 T* k  X% U/ i
/ X( m( V1 i! H# E! Y
(二)VB封装实例中VBA代码
' y" r' \* y  _  E( A步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口4 P/ i# S3 ~/ {; `

0 p) l# c' K( b3 N. m6 Q
" k' F1 {2 F) I. S, @3 \7 a& A7 }: h2 k6 R
' v7 V2 `8 g* u# V
, h( R+ h$ P  x% g: f9 Y
步骤二:修改工程名,这即生成的DLL库名8 t  r' s& p. C! \

) j9 H" a4 z( y; S! U1 v0 ^. G3 `3 R# o1 g  ~
# a, u) M1 g+ g$ [9 ?0 M  i% t$ s
3 w3 l4 @, i3 P; m

+ E  x# Q" @" Y! M步骤三:修改类名4 a' g" w. H# e

# r# Q  m+ D  m, |: `) G( @
7 W: p( Z  _( P/ f! {( A* M
8 T7 w( Q' A" z* H4 Q" p3 r0 U* i! D% Z8 X0 ]
步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口' v6 N6 _/ N. P% K9 ~
" Z( J# K1 S4 q7 f! S% Z7 ]4 I

; \8 `1 z+ w2 ?' s
: H% D# \, p. R* W; p% n  U: J代码如下
, a' W0 Q) L7 Z1 U5 X' H4 F: d'将这前的ACCESS代码改成一个公用函数; l, P# C& t0 h
'输入:strPutString 字符串变量,需分离数字的字符串3 m. c( {) H8 S; m
'输出: fFindNumber字符串变量,得到的数字字符. f: V+ N3 e7 }
Public Function fFindNumber(strPutString As String) As String
# n) |  k! N- t5 p3 }   Dim strOut  As String     '输出字符串变量" a/ ?% P. F% l# l) e) j
   Dim I; x$ W$ y$ H0 x
  
& T! h2 v! q8 q9 `   '从第一个字符向最后一个字符循环,以提取每个字符
% R8 k7 ?8 m% w# n1 S5 ]+ M   For I = 1 To Len(strPutString)+ E) n/ {4 H0 U. R! {4 i! x2 d
      '判断是否为0到9字符,是则赋值输出5 [( E4 x) e- a. l- F6 F9 D. p2 O
       If Mid(strPutString, I, 1) Like "[0-9]" Then' [0 f$ o: N& T0 W) u7 r
         strOut = strOut & Mid(strPutString, I, 1)) g* l: x: Y0 U# l3 G
       End If, Z. g2 O- y' W/ r
   Next I
- L- H3 _6 S$ X0 u; `1 X   '数字输出
& K5 n, G' a! l7 Z* f! }# P   fFindNumber = strOut" ]1 Q: _4 e3 ?& B# D
End Function
* |4 B* O7 n2 g) X/ R2 Y/ g, Q
4 K3 C: D3 h/ m! U5 w! y+ Q步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。
4 z; W1 ^: V* A6 q4 ]& m% {; Z( o8 ]' {( P
三、        在mdb中调用自定义DLL动态链接库
+ w, o2 ]5 f. B; c( R
3 G$ E! L4 m% B  b" r  X1 w( R  g  J(一)新建数据库及窗体
. s% K+ f( |6 t8 Z% L& h( h新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
$ M2 z% P& {7 a" Y* A  }8 D. Y* z* b9 u  q
! `9 w0 \% g8 Q" G1 }6 A# g
(二)引用【我的动态库.dll】库
+ O8 B- i4 {% @5 G3 Z& a3 |! \按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。
8 e# `! L2 _7 `+ m- z6 ]; \
" l! ?7 q* g9 d( ^2 Y* Q1 C! Y! j
3 \: b: V/ L' t$ [# e$ a
6 ]3 H& E, y  O3 }, b! }9 B0 I; p0 o' }$ `, m" y

, O" z, Q$ z& R( x5 l' S3 k5 T8 j% X3 p6 B/ y6 c- y4 Q4 o  ~, a
# y: C7 [5 }  `+ Q% I
6 D! }: H- \/ D: v6 F6 \5 M

+ @5 R5 h. h& {6 e6 i( z' l8 ?: \; v8 ~) t* }% B. ~) D, }# z
(三)在【CmdFindNum】按钮单击事件中加入如下代码。
( F9 T6 v2 J" q$ u1 mPrivate Sub CmdFindNum_Click()5 m( u- \- R, o* b6 |5 @; |
  '申明自定义类
# r( y% z* W% M$ G+ _8 ~  Dim MyFindNum As 提取数字" e  K' ]3 V8 D2 k6 x6 j
  Dim strOut As String! y/ c' C, \1 H* @& e- R- A) v
  
& ?8 Y! g9 J+ P2 v& G  '实例化"提取数字类"对象
( ]1 P* |) \: Z5 j1 @/ ~7 [  Set MyFindNum = New 提取数字& J: U1 X& y: m$ k
  '将函数输出结果赋值给自定义字符串变量
7 T3 q( i: X) E; N  strOut = MyFindNum.fFindNumber(Text0)
3 R0 ]% s, G+ D  p  9 _" T( x7 ~8 g! ]( l
  '在消息框中显示0 [5 Y6 _! z' Q0 A. S
  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
/ i' l2 U5 P7 |) H' E! Z; SEnd Sub" c3 G4 y8 Z9 a* t% C& w6 W8 H7 b

2 L3 m6 ~/ z. p1 x点击保存后,你就可以运行一下窗体测试你的成果了
( c; [4 W. G4 S/ l 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。
/ i0 p, `6 x$ h  _
) T9 A) l. X3 q/ X/ P. W9 B! r4 E7 A# q/ d2 a) c$ h: F- Y

VB封装DLL实例.rar

139.48 KB, 下载次数: 5

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif, ?9 j2 p7 [# r6 b' ?* |) h
VB封装DLL实例讲解(一)

, l5 x# R( K$ f/ _8 R; T十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit- q5 Y1 l- H6 `: O( V+ i* `# m* {1 h8 n
Implements SWPublished.SwAddin) g' s1 D3 T7 O/ B7 m. e
Dim swApp As SldWorks.SldWorks
& f; z0 L% b; @8 X0 HDim swModel As SldWorks.ModelDoc2- D2 w3 @" r( n0 Z
Dim swCookie As Long
" _1 `" y: U# Y6 F3 tDim swToolbarID As Long& t- W, K: l5 q6 p! C

) `% k  R: H, x4 ~& JPrivate Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
* e$ f- t2 D. [2 p+ Q0 M3 H" Q   Set swApp = ThisSw$ a& ~0 D$ ^3 f) H  A, L, u7 w# A' y& b
   swCookie = Cookie
% _- O- Z7 Q9 B, j/ a6 U; |, w3 }   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie& M* O+ E! ]1 F( L
   swApp.AddMenu swDocPART, "螺纹联结标准件库", 51 o% i$ R1 ^, z9 j, R  N: e3 D; l
   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","
: A/ k) l! B+ ?; K   
3 F6 G& H6 ]6 YEnd Function' h0 s; U8 R3 I; n- d! u
Public Sub Block_MenuCallback()
: V; q9 ~: j, }  Shell App.Path & "\螺纹联结标准件库.exe"
3 G% r- Y# r& c$ }( ~  Exit Sub
5 s$ ?6 r& R4 L- K8 Y4 SEnd Sub) _5 f9 K& v. V7 e$ K9 q0 W
Private Function SwAppin_DisconnectFromSW() As Boolean$ Z. X) \( {& [  Z
        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
: T) R: p4 }/ K, Z8 E, w4 g        
; T- Q/ l6 N# c0 qEnd Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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