QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
7天前
查看: 2488|回复: 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 编辑
3 z# d$ C( m( D  @
5 W6 H. a8 H8 BVB封装DLL实例讲解(一)
7 f8 N2 ^, Q" c) c* \/ K7 e9 I0 Y. u/ \/ a8 [5 {2 Z  P8 j9 I

. m: G+ l2 o7 l% X% F一、        DLL基本概念
$ V5 B$ X- S/ k# z3 [8 n(一)概念( c! t+ J* z4 k8 i( Z+ d
DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。
: I2 R( z5 T& G/ i(二)主要优点:0 c$ f* p7 R1 P7 a
1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;
9 V6 K: a  }8 H3 ]" s2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;
2 \& Y4 g: H- o" l, ~% e0 l3、从ACCESS角度而言,还可以更好的确保核心代码的安全。
8 o9 h/ W# ?) Y* F; a/ x8 u4 H1 A, C8 }+ ~* h! s8 B" c
二、        用VB封装VBA代码,构建自定义的DLL动态链接库
9 o, S& U9 H) ]0 A) X(一)ACCESS中实例代码
! D2 U' f% e/ T  L0 ^下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
" T( S' C3 A/ X1 c! D5 t, H$ e* W我将就这个实例演示如何将该实例VBA代码封装成为DLL。2 R# V) g, y; t* ]' ~- k6 l, i

6 U4 x! N" H4 y% y6 O4 d + \4 L  ], Z& n, J" R. m) ~

$ {# m" [0 {. c, K1 r. T 按钮单击事件代码如下:
' F, t2 q5 ~9 F4 a- Y" DPrivate Sub CmdFindnumber_Click()
# ~2 Y7 E- \8 J( m  I  Dim strM   As String     '初始字符串
3 t; y" T! V* P+ N- r& U6 s, |  Dim strOut  As String     '输出字符串变量! b7 c& X: V. Q
  Dim I, ^# |- b  I; G; y6 l2 {
  
/ t0 Y2 P. A) ~2 x3 N. |+ ?  strM = Me.Text1
* V4 ^& M2 E# ['从第一个字符向最后一个字符循环,以提取每个字符
6 b! \6 E, J% ]% z; ~3 q4 i7 {  x  For I = 1 To Len(strM)
$ }* M0 n( W! G7 _      '判断是否为0到9字符,是则赋值输出
: i' V3 F" t# D9 q. V! H      If Mid(strM, I, 1) Like "[0-9]" Then- k9 h# C& x9 u( T7 m9 C) f1 m
         strOut = strOut & Mid(strM, I, 1)* U$ D, w1 u$ t  h8 k) j0 R) k4 U
      End If$ H) n# z" b9 q0 N1 h
  Next I$ {& {+ H1 h" E
  '用MsgBox函数进行输出测试
  x$ r* P; ?- j" b* T2 |/ i3 }  MsgBox strOut3 s/ o: ]# w: _4 c( [
End Sub
: k7 m0 N6 g7 m2 v- X+ h    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)' v9 i' g6 B) g$ Y

9 {2 M* R1 N+ S* U9 j, Z(二)VB封装实例中VBA代码9 t& Z* p( R$ u- A8 _! |
步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口
9 I/ p3 E+ L# F( v1 [( J4 x: O6 Z& [& z9 X: F4 {# A4 x

3 Z2 X# i3 h( H1 u0 a! p4 ~/ o5 a3 u  f! g% h* n
# `% o$ _' s) _
8 k4 x2 o( a! O* ^
步骤二:修改工程名,这即生成的DLL库名
$ Y7 }. s8 j5 J6 f! Y$ V/ V4 H( Y! P  {* `. ~

9 c( M/ o: n: w, v2 k
/ B9 K; b- r0 N1 i" C) R  O% u. U3 n8 |$ M/ r. U4 I' V  B" e

# i: m# t) v  E+ E5 o( ?4 j步骤三:修改类名
6 S3 _$ {, C; S  A3 D; B# K1 k, l2 f+ Z
% F! t3 O& K# C' B# K) M

( w' m3 K, V. Y6 j+ R8 S" Y- p4 N; [" _2 P5 p, t; T
步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口
, z6 ?; d  J9 y6 N! {8 Z" [+ X5 D+ s( m3 t4 S8 U, W) \0 G
- ~5 ~5 _! R9 Z8 g3 j6 ^

; I* V  d" @/ @代码如下( z6 j; h1 h% X5 }+ P" @' z
'将这前的ACCESS代码改成一个公用函数& P" h0 g* M2 a. Q+ V& Q; G* L
'输入:strPutString 字符串变量,需分离数字的字符串
3 D  ?" N5 W2 P* B! U/ _'输出: fFindNumber字符串变量,得到的数字字符  }7 ^' j1 X% u6 K( V# K
Public Function fFindNumber(strPutString As String) As String
. S3 X/ K" q/ f. U8 Y   Dim strOut  As String     '输出字符串变量* L. v. M: g! W0 R( _
   Dim I
0 d) N" Q& d7 A2 `3 K  [) Y2 z" ?6 a  
; U+ w# x  H; w4 g/ I, ]   '从第一个字符向最后一个字符循环,以提取每个字符, j" A2 R8 L# ]( K$ L! o
   For I = 1 To Len(strPutString)9 V0 _/ [/ N) c& e5 J
      '判断是否为0到9字符,是则赋值输出- J. Y9 }9 g2 c, o1 L$ {$ T
       If Mid(strPutString, I, 1) Like "[0-9]" Then
7 B/ z  M) ?3 q- Z         strOut = strOut & Mid(strPutString, I, 1)  H5 ^: Y! c2 V
       End If
( g/ s9 k! N% J" S% |" ?   Next I% e( y1 `2 Z; U4 V
   '数字输出
3 I9 ?6 l% ]1 O) z   fFindNumber = strOut- j, b! b  V& s2 d, c9 b( h7 S
End Function1 C( R4 x6 Z& ]* m4 p. }

: d$ M9 [4 B0 u  U1 X- [步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。
8 ^: }9 }0 k/ [' {
6 |* V+ k$ c7 N1 u三、        在mdb中调用自定义DLL动态链接库
; S- l  k% @0 ]1 H  R4 K% F( V8 J# B% A, m% K
(一)新建数据库及窗体
. a* `7 e. [  Q; N( n* S3 _* U" d新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
. Y" I8 M" z& O$ v4 j1 F: b* M: M
2 F! O* V. W! J% B) v5 w8 J7 a# x8 C0 c  H) ~( l) g* n5 n7 E
(二)引用【我的动态库.dll】库( s8 x3 _, I% E- W
按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。! M- z1 e( u1 G5 h% E4 d8 R

% V( D  f) Z1 h! e( i1 Q- o4 W, P1 m; @4 l
3 J7 n2 T. |0 q( w

) Y" b: @4 v+ ?/ k. d
+ W4 L! v; _8 |% u4 x" @1 y& i) Z+ ]

8 d" T5 b1 W; _
, W* o( k3 ?6 F# s" \
; d, _  `/ \- D4 U' p
2 a9 t1 {. g  r% k3 X/ v0 F(三)在【CmdFindNum】按钮单击事件中加入如下代码。. }8 Z+ X. M5 x# R- M; o6 y
Private Sub CmdFindNum_Click()
. @3 K0 Q/ r$ a! s. o  '申明自定义类4 k5 B6 o1 Q' F: T" w
  Dim MyFindNum As 提取数字
, @. \/ R. m; G; i+ a  Dim strOut As String
3 L, d4 b# K7 t0 `3 Q  ! i; X; j! |/ @7 g1 d2 U
  '实例化"提取数字类"对象
+ x. L4 t& U6 h5 l" ?+ S1 N  Set MyFindNum = New 提取数字: ~6 ?, M- V+ L8 A
  '将函数输出结果赋值给自定义字符串变量
4 G7 G3 N, Z; |3 m; t0 {4 a8 {  strOut = MyFindNum.fFindNumber(Text0)
! v: k$ Q7 B; p# R, F, F0 l0 f* a* t  5 \; z- \9 B' j6 t
  '在消息框中显示7 c0 [: `( m  Y, j! y: P
  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
' J% E5 S- d2 ?2 e! vEnd Sub% H3 ?6 u- Y; R  T8 X& }% D" ~- F
* q  x' w* \  n  Y1 O1 k8 e
点击保存后,你就可以运行一下窗体测试你的成果了
+ c7 {, D1 d5 f) R2 m1 D 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。
$ u' E, F+ o+ ?0 L; E
% z) `1 u; l9 w, g* k, Z# p. ?$ {0 K+ {* ?3 j5 f$ q3 u

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif
/ A7 e+ U2 G$ ?  KVB封装DLL实例讲解(一)

) m  Q1 W! H0 A! \+ {十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit
# l: v& h7 c9 ^' oImplements SWPublished.SwAddin
$ u1 E4 i+ f3 `  k9 BDim swApp As SldWorks.SldWorks
( l7 F4 Z" q: W) D' A( q+ I$ EDim swModel As SldWorks.ModelDoc2
# p6 ?: Y" ^) tDim swCookie As Long& U; W: K5 V2 C$ m
Dim swToolbarID As Long
. W' F( X" n% D/ i5 j) }8 T4 m4 `7 V( U+ b4 p! P
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
1 W( j7 K% B1 i# C. }   Set swApp = ThisSw
4 h$ M; y3 _, v3 r' i' m# m   swCookie = Cookie6 R+ e/ ~) \: [" K$ n' u5 \
   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie
& U; s: T, M3 I8 L5 E   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5. l, u* K! Z* F# o: Q) X6 N8 m
   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","
5 `  q3 p# s1 V   
9 G- a/ [6 Z0 CEnd Function
# a) L  @) [3 S" @# gPublic Sub Block_MenuCallback()
9 n- C2 f& x: f, U  Shell App.Path & "\螺纹联结标准件库.exe"
) h& m3 ]" H: @7 b- u/ {  Exit Sub
; A# W# v  S' a7 ]. X7 Y3 f3 `/ XEnd Sub8 K5 z9 d+ p' X& p' f+ x: f8 Q
Private Function SwAppin_DisconnectFromSW() As Boolean, U& F" w7 E6 y8 Y
        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
* [* N9 J/ e* t; M( }        
$ y3 p- h9 T( n: fEnd Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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