QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2412|回复: 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 编辑 8 v6 v# x. C" [7 D+ O) r4 W+ Y4 Z

6 i0 J1 A0 @8 L8 T8 R6 S/ D+ b% \& QVB封装DLL实例讲解(一)8 H& V( F: f( w  {' E; ]7 s
. n# D9 \3 h1 o. ~/ s

( ~. h  a, {' M5 y1 h一、        DLL基本概念
$ G' E7 Y7 F/ N(一)概念% _. f1 Z2 I2 f7 `4 Y5 ]
DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。
9 ?4 v) m) I! e+ A9 K) i(二)主要优点:
* W; j# q! D- a! v1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;& a. G: \* p4 P
2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;
' b! j; B# B6 }1 N7 t: N7 Q3、从ACCESS角度而言,还可以更好的确保核心代码的安全。
+ Y. l1 A. ~- K, ?! n2 N3 x! f8 M* e1 Y
二、        用VB封装VBA代码,构建自定义的DLL动态链接库
; R( G5 R9 S4 K  F6 l# P- j(一)ACCESS中实例代码; ^; X5 T' p9 }+ j2 H
下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
# W0 p0 G' s0 r" C我将就这个实例演示如何将该实例VBA代码封装成为DLL。( j! s* [  U: A5 }( v4 B
- ~3 Z" j4 F% d

2 \% O0 ]/ C+ {
! g* [" @5 b; D2 u& f 按钮单击事件代码如下:: M6 @! [9 m2 Q/ t5 [
Private Sub CmdFindnumber_Click()3 K8 }+ B- |+ J; U# B
  Dim strM   As String     '初始字符串
/ H; |" a, h: c- H8 B& z0 p  Dim strOut  As String     '输出字符串变量9 |6 k- [; V7 I
  Dim I+ O5 S6 I* h% u; S: q& S1 E
  8 @. a* h; d" E) ~! m
  strM = Me.Text1' y9 P1 s7 z. \
'从第一个字符向最后一个字符循环,以提取每个字符/ H4 m# m2 h6 t. A" j7 g& \3 q8 m! u5 T0 X
  For I = 1 To Len(strM)
2 J, X! j% b7 }6 C  d# D7 F. b      '判断是否为0到9字符,是则赋值输出5 E) j' s' B8 y. |) @4 x
      If Mid(strM, I, 1) Like "[0-9]" Then% p- ]% u4 v# k
         strOut = strOut & Mid(strM, I, 1)
3 @# }+ r3 T  y      End If
1 O0 g7 u3 E8 R  Next I/ n. f* ?1 X4 p, [7 P7 L
  '用MsgBox函数进行输出测试( q' q; Q- Z1 L4 H1 f
  MsgBox strOut3 R1 U# W( {( o/ z& j
End Sub
7 K$ [4 u5 H  W1 n! y; X! S& c    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)
# P0 M4 M- f1 }8 \% H8 L- V
; U  ], b$ b7 Q; |! e  }(二)VB封装实例中VBA代码
- S+ x  ~; K4 ]/ _" ]# d步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口/ A; C8 l/ w: Q5 @

9 z% d. [( P; C5 m8 {$ p. M7 w; P/ ~( J4 A" R

7 a  y! M# ^! o) G: B# z; U1 K; _4 F5 R) _* s5 ?( W1 ^$ G! }6 x8 j" o$ l
5 \+ {% y( m8 P
步骤二:修改工程名,这即生成的DLL库名
7 k# n4 @- ]% I0 g( Z. r. ^/ J% t" p: f; F7 {

, O- g+ Z8 D! c: H# ^: o, T) i7 g0 v5 _2 d) s3 T; g5 A

6 F3 e7 Q$ e( O' O5 F( T# N* m  Z9 d+ t& p
步骤三:修改类名
4 H4 i) V# d- }4 Z- K
8 o3 m5 F$ {% y: n* [2 G9 J' i" @" P$ W, f# \8 X

- X/ t+ J9 p) m  x: q  Q
# J8 ]6 G+ b9 x7 ?5 S步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口
4 u' d! ?8 x9 \+ [- E" G4 j. M" y: }& A9 w! e& c
  n4 e, S4 x* _- K+ o
7 \+ c: G4 s, R! b+ Z
代码如下8 r/ A9 M6 V- L6 s
'将这前的ACCESS代码改成一个公用函数
$ q! _% n1 N; x2 J'输入:strPutString 字符串变量,需分离数字的字符串
/ e8 F0 o( V9 G' d" f5 K0 s'输出: fFindNumber字符串变量,得到的数字字符
. E6 L/ B/ q# ~! f$ s, s) F8 dPublic Function fFindNumber(strPutString As String) As String9 n: z8 M. F, A
   Dim strOut  As String     '输出字符串变量
) ^8 b! n" G' F4 n& `( U. e) r   Dim I
$ ^# p# f9 C5 U4 @0 y$ S  ( t% j: G1 Q7 B: R' k" Y$ h8 f
   '从第一个字符向最后一个字符循环,以提取每个字符6 i! A: d+ ^1 }4 w. q4 z: p* H
   For I = 1 To Len(strPutString)
2 y7 m* G5 b: h$ w; v4 {# _      '判断是否为0到9字符,是则赋值输出
* a9 t: k4 P1 c- y# J" H2 n       If Mid(strPutString, I, 1) Like "[0-9]" Then- M/ I( ]  U: R0 U
         strOut = strOut & Mid(strPutString, I, 1)/ y; G! y3 G  s0 |' t
       End If
5 R! y! y2 v6 l0 `+ D6 @, }' f   Next I
  \& x3 T( X5 }& A* d   '数字输出1 y+ Y! m1 Q; W7 [; D5 |* L5 e1 L
   fFindNumber = strOut
: R  B! Y4 f( ^6 x, E7 n% B% d0 MEnd Function& p4 H6 F( \1 E
- g1 r6 c1 S9 v
步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。
$ x3 s2 n# Q# Z/ a% T1 N" {( I1 f9 G" o, I* p
三、        在mdb中调用自定义DLL动态链接库0 ]7 I% W8 q, Y
, h$ R( B% e5 H( w! n
(一)新建数据库及窗体% j  a5 ^+ q( ?
新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)8 B+ ~" ]1 \: y9 i: q) d
2 }- f2 o: q: G% w8 ]
' f1 w$ @/ _1 A  _6 P+ B; J
(二)引用【我的动态库.dll】库8 O: {8 i0 n- t& [7 p
按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。$ C' X/ W6 z5 ^2 I  U) l
# |6 v+ c1 ~/ L" x  k% `6 |

3 V% B, Q: t: W4 N+ G# B: A( B& [. ~/ ~+ z- _; n' V- m
% o: j5 C- _" V5 h  u: v8 }
- [- d! n% M' O7 J! s3 D

: L' o3 W. u9 l, A+ R: x0 E* v1 L/ v1 ]6 o9 w

2 d2 `. k2 I5 r9 x
" W' \; k6 B) m6 c, t+ @$ k* ^: M# W( X1 x5 e
(三)在【CmdFindNum】按钮单击事件中加入如下代码。
: Q, v1 G3 T4 FPrivate Sub CmdFindNum_Click()
5 t( Q7 R' T& u" w2 P1 U* c. O0 j; p; C  '申明自定义类
; b$ {0 T& p6 g; `3 N7 Z( \, y  Dim MyFindNum As 提取数字, ~& u1 I( M: I
  Dim strOut As String
; i# N/ S% G$ ?5 @2 L2 F8 k. W  
  `# J, r9 t( I$ i2 t  '实例化"提取数字类"对象; U2 g- c: F. ^, P1 ?! ?0 [
  Set MyFindNum = New 提取数字
/ s5 N! n3 ?/ E5 r* r  '将函数输出结果赋值给自定义字符串变量2 {3 G; K! V# l! m2 f
  strOut = MyFindNum.fFindNumber(Text0)
* K% T: D( Z4 P# B  6 j. Y2 x4 f: x: q4 n  f
  '在消息框中显示; b' k* s+ D- B$ Y
  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"* K( o: t7 A5 v
End Sub
( `( V$ x- ], s; w
1 m; f( J* |9 d点击保存后,你就可以运行一下窗体测试你的成果了: Q) j  z7 F4 w6 U* J
 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。2 b! g# w5 B) _! W3 x
/ r; z( |6 v9 G0 O  S" m
- P$ j+ W6 [* c# X2 U/ l6 Q: Q

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif
0 D2 o: a' N. m, @9 N- M  UVB封装DLL实例讲解(一)
& [5 i; c( [/ C! Y
十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit1 ?& I% a: u  D1 D
Implements SWPublished.SwAddin
. W# \  k* X# Z. `4 C! O+ UDim swApp As SldWorks.SldWorks
3 _" _9 z  E  Q+ [) ~: mDim swModel As SldWorks.ModelDoc21 |: E' @& \  U+ H% ~  M; z& e: a
Dim swCookie As Long
" e4 L: |! ]1 i- A5 LDim swToolbarID As Long
; P- X: {! f- U8 P
! m, h9 v/ m3 J% W, KPrivate Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
- j# }2 C) @5 A- t$ m+ x! n   Set swApp = ThisSw9 \9 r- `; B  V/ k& g# L  A0 l2 K/ ?* |
   swCookie = Cookie
+ a2 b! o6 g9 d( @' g9 h   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie' A3 R& H9 M! a# `) i% k
   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5) k" Y( M* G5 c! n& e+ Z! I0 y
   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","
- t$ B6 z7 _! j) j% R9 K- i% h   
7 I+ x6 A) b4 P, B) V1 mEnd Function
+ q1 ]+ k. Q8 @/ DPublic Sub Block_MenuCallback()
% t) _" b, q- P$ b  Shell App.Path & "\螺纹联结标准件库.exe"
" a  ]! {/ n2 B. X9 i  M8 |  Exit Sub1 Q5 W4 |& s0 O2 o
End Sub
! J8 h" R# x: A3 Q7 D6 w+ h( wPrivate Function SwAppin_DisconnectFromSW() As Boolean
4 O- m* F0 _* x/ t: h1 y        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
  |& [( X1 U( U, j        
# ^2 e8 X3 Y: j- tEnd Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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