QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
goto3d 说: 版主微信号:caivin811031;还未入三维微信群的小伙伴,速度加
2022-07-04
全站
goto3d 说: 此次SW竞赛获奖名单公布如下,抱歉晚了,版主最近太忙:一等奖:塔山817;二等奖:a9041、飞鱼;三等奖:wx_dfA5IKla、xwj960414、bzlgl、hklecon;请以上各位和版主联系,领取奖金!!!
2022-03-11
查看: 2210|回复: 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 编辑 ) \1 k& t* l6 J

3 \4 |, k- A# o$ J9 ]/ E9 N* VVB封装DLL实例讲解(一)
$ z* z# a! S  t5 E. R4 \* G1 F; k; \+ }! |  y. S
% m5 E4 t) k+ R' w. T6 S4 s
一、        DLL基本概念! m1 m8 m* {, [7 r" I- O
(一)概念
% G9 `( p" \/ n# K/ O# e! n% ODLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。
4 J& L: I6 W4 A7 n(二)主要优点:
# R% O% h7 t# c7 Z; s1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;5 {2 ~8 d7 k& }; |% E" N+ Y
2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;) [. v* _$ _- S! S
3、从ACCESS角度而言,还可以更好的确保核心代码的安全。
, p: _+ v" q8 X  r! ?8 w4 x5 c! B9 D
二、        用VB封装VBA代码,构建自定义的DLL动态链接库
: }5 T8 n( o4 E6 U1 H0 _(一)ACCESS中实例代码9 v9 {$ @( m- V3 N7 Z' I
下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
$ V7 s! E5 U3 ^3 U我将就这个实例演示如何将该实例VBA代码封装成为DLL。( B" J2 b" i, g
+ f& f, T7 f5 Z1 H& Z3 Z
4 o8 A" n5 X4 g' `. L  t

  ^9 Y# f$ H8 m' \- j* a 按钮单击事件代码如下:
( C+ {* k( v6 J! B1 A0 I; A' pPrivate Sub CmdFindnumber_Click()
& @( W2 D* T$ W  Dim strM   As String     '初始字符串$ U+ m( l+ d7 L5 Q4 k1 a% \, _
  Dim strOut  As String     '输出字符串变量
% p. U! J, O$ L3 x( _  Dim I) H* B  l5 _# C+ z3 k
  
+ X! V: }8 p, c6 ~  strM = Me.Text14 L4 s& d+ W; h6 a
'从第一个字符向最后一个字符循环,以提取每个字符
, l& L" x/ x- I  a# ]  For I = 1 To Len(strM)# z! B: O- @$ _/ R6 U" E
      '判断是否为0到9字符,是则赋值输出
3 ^, m, g" N4 h$ t1 s+ K% U: @3 K      If Mid(strM, I, 1) Like "[0-9]" Then
: J# w. @/ i' o6 |& p+ F2 Q         strOut = strOut & Mid(strM, I, 1). Q/ J. ~- ?5 e, C# z
      End If
6 ?* A( x7 [0 T' s* {  Next I
* x8 p" T7 O# s9 E( ~  '用MsgBox函数进行输出测试
: V! u: |% \' B8 T5 b8 Y" ]  MsgBox strOut
- b/ R2 r+ E0 N: DEnd Sub
/ L/ F/ _8 X1 B    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)
" R. [4 S9 |' L7 n; t' p  Q7 _6 E' l& F- w  V+ n5 t7 y! x
(二)VB封装实例中VBA代码7 t. Z5 g/ h2 _9 [2 M! G  b8 E1 a
步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口
6 D+ h; {+ e/ l$ W
6 `$ \4 P/ d: f) U- \
; l3 W8 U* n) U2 e
- I, A0 Q" h9 J6 i. y
0 j$ ?) E( f; ?! Z2 Y  W" K5 j+ x$ {* D  S
步骤二:修改工程名,这即生成的DLL库名
) ~2 e; N9 H8 V$ {9 I- U% ^* o) M+ T# G* @6 y7 V. J
' q0 s( g: m2 i6 b& {
# z4 [. S  q- H' m

% u' v5 t* n# v' b/ G
+ s. P' R; c0 O6 N; {0 q$ {& m- K步骤三:修改类名
" H) R3 T; Y( ?7 G( ]$ A9 {0 H$ I& S( j/ s8 i
  y# Y; d' D. G

, e& V, C1 ?- k' F, b  a! F; x+ j, e+ ~& H4 S+ O
步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口
2 w/ M; T" f) ?% A) k$ G
: r" l3 S, H. ~( y1 J9 ~4 D# i. }9 c  [
7 x, w( v8 W9 Z
. S% x' M5 `- g1 |' I代码如下
8 D3 ?& r# z3 o* F'将这前的ACCESS代码改成一个公用函数
5 v3 `2 S1 l; a; K% T'输入:strPutString 字符串变量,需分离数字的字符串- K( V6 n  H$ }( v
'输出: fFindNumber字符串变量,得到的数字字符
% i! W7 d- d! L' }) JPublic Function fFindNumber(strPutString As String) As String
' Q  f5 V; {& n4 v' R/ A* S# ]  X" |   Dim strOut  As String     '输出字符串变量
/ P5 `8 O, f& E7 z9 r& \" J8 A( K; e   Dim I& I# {- j# T1 O$ ?
  5 _9 l2 F' w; V
   '从第一个字符向最后一个字符循环,以提取每个字符
2 o0 O% H3 y/ e3 V   For I = 1 To Len(strPutString)# T) d7 |7 J/ p: j) C! A
      '判断是否为0到9字符,是则赋值输出
% Z' A2 N- b: u1 I       If Mid(strPutString, I, 1) Like "[0-9]" Then6 N  s  w5 V! t
         strOut = strOut & Mid(strPutString, I, 1)9 U, {% A. U) b- X' Z" p
       End If
0 [0 M. M" H2 N& D2 X   Next I
9 E3 r+ L+ Z/ w% u$ n   '数字输出) v& D& b3 V' i
   fFindNumber = strOut/ B. B1 X  V5 p/ {$ |& S
End Function+ }6 {) @- T5 R5 ~+ c1 L
& m$ Q2 D7 N: N$ u
步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。- Z& D7 F0 D5 j8 a/ U+ C7 [

8 u+ k. C  I/ g' w  J三、        在mdb中调用自定义DLL动态链接库
6 b& A1 F. u7 d/ M3 u7 p
: I* P9 _+ H' D; ~" M- B, }(一)新建数据库及窗体- j+ O: C* u8 F1 h7 M' t
新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图); M5 w7 l4 D+ k4 _; d* B& J. L
# d( a, z8 t3 R
0 `7 ~( s6 ?3 N- d( S; p8 H
(二)引用【我的动态库.dll】库
8 n# d1 `' x6 N' ]  {按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。# \6 S/ u* j- [! d

8 x" |, R" l  I8 O* s5 _/ l. N3 T, W
# e, H6 g, j2 X0 e( R/ r

6 F. O2 o9 j4 {2 o7 x: \* K
' ?- w1 E+ H  l6 M& X3 J* y2 U6 u+ c0 t% W$ ]6 E, @0 \7 e+ ?' K

( V5 b2 |  q* l) w' C! o
, f* Z7 x4 O+ |2 z! T# l2 j
6 t& h& l4 t8 s4 [% Q6 j
6 b1 n/ o- x- ](三)在【CmdFindNum】按钮单击事件中加入如下代码。
# S& \5 ~0 B' b8 |. N8 c9 ]Private Sub CmdFindNum_Click()( _9 S2 X: Z: E8 |
  '申明自定义类% t5 c$ C4 d4 l6 K- y# K% X# B) L
  Dim MyFindNum As 提取数字
4 ?; Z; T5 H3 W  Dim strOut As String  N) h, Q( n/ A; [3 J' l
  
0 K+ s8 @. L/ p. _+ Z( U  '实例化"提取数字类"对象! M: w2 y: r- ?/ @2 v
  Set MyFindNum = New 提取数字7 n& w* }" A% r# b9 v
  '将函数输出结果赋值给自定义字符串变量
7 x3 S. P8 A5 X) V  strOut = MyFindNum.fFindNumber(Text0)  g: g7 @$ C( B  W
  
, v9 X& [3 u! C; I  '在消息框中显示
; a$ d3 Y  m! g& H) p# R  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
! _- T! R7 K# Z& F7 ]6 f5 `7 eEnd Sub% k. x7 x8 o; T! M

2 P9 m9 ~8 s& c6 `; o# K+ W点击保存后,你就可以运行一下窗体测试你的成果了
  y0 s. K, A2 E3 ~( c3 T! k/ S 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。
" D, c. L+ R6 Y! _9 X3 Y* H$ i+ K
0 `7 E+ d) @0 b7 f4 m
, m% B; t% }" a4 ~, N5 F8 h7 w

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif" y7 j" @3 g/ f, }7 n
VB封装DLL实例讲解(一)
2 [1 A" c' R4 s7 E  e. C' b
十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层
Option Explicit
; f  u; g' ~5 ?9 eImplements SWPublished.SwAddin" J9 N. R$ a2 {( ^, T
Dim swApp As SldWorks.SldWorks
# F. s$ x: z6 q3 Q* @* _Dim swModel As SldWorks.ModelDoc2: z7 n! }4 A4 |1 x: G+ S5 I2 j
Dim swCookie As Long
& d/ b, T' A# A: o2 j: N7 SDim swToolbarID As Long; c7 I: L& z2 Q  n

" ~' v8 |9 B, M8 d6 {# O7 P- L; ePrivate Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean/ \  v5 ^* p9 I, _# f! k+ r8 @
   Set swApp = ThisSw
+ ]  I1 N  N# m8 g$ U2 }   swCookie = Cookie
8 i/ o) X4 Q  o0 V8 v& h, V   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie
: `, G  M# e. u; _, N' q8 W   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5
0 Y; A* R6 m6 y. N7 _6 R   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","+ l0 K, o! {6 V* d  u! N  t+ G
   " W1 z: ?- I, [0 U3 m( R+ A
End Function% z& r3 e$ p3 k! f' s9 y6 M
Public Sub Block_MenuCallback(); a4 M" _# F& l- }, H% ~% `- {
  Shell App.Path & "\螺纹联结标准件库.exe"
* \+ v6 U# n: Q% ~8 I  Exit Sub
9 L5 Q7 J% _2 d9 HEnd Sub
) v" n5 Z3 n$ e$ \, jPrivate Function SwAppin_DisconnectFromSW() As Boolean
4 @7 r2 }9 b" h        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
$ y: M- T& Y# N! \. s2 y$ g- S        7 V: r8 w: x9 Q
End Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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