QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2406|回复: 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 R3 h0 q/ R  p8 J& E# d/ m# L0 ^' m& t1 m
VB封装DLL实例讲解(一)2 r0 |. r' `( n; c
* K: A7 U. f: ~+ A/ |

/ l& W; H" [& L8 |! S4 \一、        DLL基本概念  y. m7 z* o  q
(一)概念1 Z3 ?2 R# `8 w2 c
DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。+ N& S8 ^6 v, |( ^' r
(二)主要优点:
7 f& B' K+ M/ ^0 \1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;
/ v; L/ U( i' q4 y# \$ x2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;
/ [* j( T$ Z! l2 ~* \: n3、从ACCESS角度而言,还可以更好的确保核心代码的安全。
5 C9 N! P4 `  R2 f2 ?! [( Z
/ y: ]! e7 b4 q" k5 E1 u5 |5 F二、        用VB封装VBA代码,构建自定义的DLL动态链接库
* c5 n5 o/ h& [7 ]0 A6 i(一)ACCESS中实例代码! d8 x! K" K$ S* V+ ]
下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。, I: f& x5 C; |3 K) ]2 r7 a
我将就这个实例演示如何将该实例VBA代码封装成为DLL。
3 V* x& q* h5 [, ~ & R7 {" ?7 s9 @: y3 o/ Q0 H1 h% U4 w

: q& h4 x1 k/ k- F5 L" `3 k) H
" r# R5 e( }7 C8 J/ T$ E5 t 按钮单击事件代码如下:
# T* o# d, a" q6 n* f. SPrivate Sub CmdFindnumber_Click()! Z) D) K+ s* B: z3 R6 Y
  Dim strM   As String     '初始字符串
9 y4 Q: i9 }2 C: \/ i  Dim strOut  As String     '输出字符串变量
# V( ]0 Z3 y) g4 ]5 ]: Y  Dim I
  l: {$ b" p8 f, a4 w7 h4 R  
! N+ p2 C4 F" N9 T  strM = Me.Text1
$ k% N9 Q/ H; s'从第一个字符向最后一个字符循环,以提取每个字符: P" j6 }+ Q# D! e8 E
  For I = 1 To Len(strM)) @+ Q$ N( t" e( _( |) a. A+ {
      '判断是否为0到9字符,是则赋值输出
3 Z2 N' v2 h# Z      If Mid(strM, I, 1) Like "[0-9]" Then
2 t4 c1 x3 ]& C# C( z" e* A) p4 E         strOut = strOut & Mid(strM, I, 1)) u, N; Z: {% v0 H! u
      End If
. l/ c. e2 l  H2 C! C  Next I* b% L1 f# h! [8 y' }
  '用MsgBox函数进行输出测试
; }, Z2 T9 o4 h& Q. _  MsgBox strOut
- d8 X9 P9 _( h7 v& {( YEnd Sub9 y( ^) ]( ]1 P. I5 j* _4 `
    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)
7 Z! r- {! q6 O5 L6 ^& h5 G" u5 P4 c1 I+ n' Y
(二)VB封装实例中VBA代码
9 a2 o% N- g9 w. o步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口: ]  i0 I4 r: |$ [" E

9 \: c2 I: ~! ?+ Q4 Z3 D; v* V
4 X- ?% C4 [5 Z8 _" H2 m, X9 q- Q( {2 f. |4 v7 i7 A

/ I& X! y. o6 R1 ]2 {. \4 e
1 G- o- g+ |! z, S) s2 N( [* u; J步骤二:修改工程名,这即生成的DLL库名
) l) a2 E. P6 L  `8 u! h8 M
' @" B* A! n* D0 a9 {
2 N0 L% V8 Y  k: f9 b- V3 t  l3 e  t0 ~6 e
5 `0 k3 T( @( t. U: L! {2 O) H
, v$ M5 A( r# c  g( O8 {
步骤三:修改类名& \( ]& B/ {4 q5 i  _, I
! X0 p+ \1 a# X. t

  t) b5 F& m" h( A: o( ~6 ~7 V9 e# w

" t1 i7 u5 H" U) f步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口4 q, o, Y7 P0 }

& z1 f: r  H2 M0 G  ~; G0 C  r* T% G! S; c% x. Z

4 O1 b0 q) M; L- |- ^4 p/ e+ w代码如下! s( l) H7 ]( X4 g4 B
'将这前的ACCESS代码改成一个公用函数
* @3 C1 m1 f1 d9 z$ u* X/ G'输入:strPutString 字符串变量,需分离数字的字符串
3 D5 s! k7 \! O4 @. }, D3 c9 N'输出: fFindNumber字符串变量,得到的数字字符
& X+ }! l/ ^2 v1 d/ A! y, I9 TPublic Function fFindNumber(strPutString As String) As String
2 J( j% H* o! |2 c! D; d" I   Dim strOut  As String     '输出字符串变量9 ^# I- b9 j) p# w
   Dim I
% s7 V  e* m; `  % s8 j1 a) Z) v! K$ t
   '从第一个字符向最后一个字符循环,以提取每个字符3 [( z& e" j$ F) }$ o
   For I = 1 To Len(strPutString)
1 T: B  R: i2 Q3 |  E6 v: C      '判断是否为0到9字符,是则赋值输出
) Y. w: A0 T0 t" x! q       If Mid(strPutString, I, 1) Like "[0-9]" Then0 O+ j) O% d% P$ Q7 @1 n
         strOut = strOut & Mid(strPutString, I, 1)9 e' H; i! k+ `5 Y/ F
       End If
9 s, s& y* b8 Q1 l: M   Next I
! y4 M: B1 h+ t5 f3 _   '数字输出3 a5 P* X7 ?: p
   fFindNumber = strOut9 P7 [& p; F: h$ l
End Function
6 b& e- i$ `  t; F0 D# e; a+ k( U4 p$ j/ j6 r$ C- Z% Q
步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。' n; O# _1 I/ B0 }
- Q) F6 w6 L- M  v* f# r, k( C: o) u
三、        在mdb中调用自定义DLL动态链接库7 b$ v' S5 Y% D8 [
/ Z& i9 `; s4 s9 f5 g8 s1 R+ I3 X
(一)新建数据库及窗体  X' t- h2 O2 I' C
新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图), q7 X7 \/ B$ q+ J% z

" M# K0 T' ?9 y* u# r$ b) E( d6 ^2 U, g3 }
(二)引用【我的动态库.dll】库
0 J' J2 |1 t  H2 ?按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。; E0 A( }! U" _9 j0 y2 b8 E
4 {- z/ W; i8 o7 w5 `9 R3 R
6 F0 B( `+ w8 r5 u; [

* H4 @8 _. u+ e2 |6 U! v% Q2 @' [8 W3 v- D

& u+ x- l* t1 X' L9 h, K, h; r$ D! D8 V! Q7 ], x
- {5 A& e& `/ _" t, F4 M' C

& e# F0 {" t/ [- O/ J# ?% c" e2 J" H) \
. w: t6 B" B4 ]
3 W1 b& J; j2 h) M8 Z5 H' c* J(三)在【CmdFindNum】按钮单击事件中加入如下代码。
8 v, d0 {! B( M6 \+ j% ?( ~Private Sub CmdFindNum_Click()
5 S' q( C' q& t$ @  '申明自定义类9 G0 \! p. d4 z
  Dim MyFindNum As 提取数字/ X1 X, e# s% k
  Dim strOut As String
; j) s+ f/ `9 C9 i, K# C: I4 j  
; G6 P5 B4 J5 J2 g( d: ?) X1 q7 p2 M  '实例化"提取数字类"对象
7 O; z8 N. y/ P  S4 Y  Set MyFindNum = New 提取数字* p8 ^: t: H5 a3 s
  '将函数输出结果赋值给自定义字符串变量
. n% W! ^& [  o/ l  strOut = MyFindNum.fFindNumber(Text0)
5 e9 m- ]2 ?' I% I  
8 \! K+ d" Y) \4 z* p  '在消息框中显示4 j7 |) |. _" i4 P& _; e6 j/ F. X
  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"- X0 V; ?2 i, G2 @3 b- ~) T6 D7 E
End Sub0 [2 i4 |6 ^3 I- ^) |* A

) g; }4 t# r: l: T" f点击保存后,你就可以运行一下窗体测试你的成果了
% \2 i/ d; X: H5 ^% }2 r 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。1 c; U- T& r; p- U: E# P
8 |$ {2 d2 w, X3 E% j
  I( D0 c( N' E* S, k0 I( h

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif
1 l- ^- z& ?# R1 x2 i' y/ J) e4 Y$ ^VB封装DLL实例讲解(一)

4 z# D; U9 J, z十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit
1 ~' O# E3 ^2 d* y$ f. ZImplements SWPublished.SwAddin* u# z4 z6 g3 e7 K" W
Dim swApp As SldWorks.SldWorks2 N# g3 Z' T3 I' m; ?$ `
Dim swModel As SldWorks.ModelDoc2
' E  c/ ]" R- b1 RDim swCookie As Long% ]5 w" L" Q8 Z5 p1 a9 l
Dim swToolbarID As Long8 h& K/ N8 c" u% |" G1 J" I& s

# F+ ~" j3 [" G2 GPrivate Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
, {/ @% Y& k/ ]4 t  t* Q. H! Q1 @% e# S8 z   Set swApp = ThisSw8 @! f, e6 }5 q, j$ X
   swCookie = Cookie
5 D& H! L# W) H) _8 Z  |1 u   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie
# s; n3 ?. i3 ], C6 U; c   swApp.AddMenu swDocPART, "螺纹联结标准件库", 53 m/ |, q/ ^" n! ?  I$ f
   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","% o5 f" n" }% [+ C4 n& q% e$ C0 L" v
   
+ l0 R, j5 w+ K8 B* A" lEnd Function# i; i( `( `& u& c# @" n
Public Sub Block_MenuCallback()1 x& k' q. j4 ^
  Shell App.Path & "\螺纹联结标准件库.exe"
( w* S& H  L+ n# R  Exit Sub
9 A( p3 G: [/ d, d* LEnd Sub
* a/ l% p, n  F! U5 J5 H; tPrivate Function SwAppin_DisconnectFromSW() As Boolean8 g; E& L) y  U* Z2 ?' X" [
        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
$ k+ n1 U+ T5 ?! Q        + m8 e8 x0 S- D8 k7 v% ?8 q/ y1 q
End Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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