QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
1天前
查看: 2418|回复: 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 编辑
4 P$ G5 U4 a, y7 I1 n7 h8 o* _
* s, K' Y; g( Y' r  \VB封装DLL实例讲解(一)2 ~# H1 h+ z3 N1 @, \, t2 z# y5 o

% w+ J9 p+ V# P6 Z$ L4 _3 c. W4 x3 i4 h3 G
一、        DLL基本概念
" w7 L$ U8 w$ N0 y# V2 d(一)概念
1 w2 X/ _; I1 v: C7 CDLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。
- `' }' ]% [3 Z6 R9 k(二)主要优点:
$ x4 ?% y# @9 \- @+ h  A- G% V1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;/ E) G4 n% k$ _
2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;
3 _# G' {: H- X( ~3、从ACCESS角度而言,还可以更好的确保核心代码的安全。
7 Q) y7 @* d% R) s
. s" P, e9 B# |& k$ U二、        用VB封装VBA代码,构建自定义的DLL动态链接库
7 p: H7 d: Z( [/ }(一)ACCESS中实例代码
0 R/ w2 k$ _% r( w" Z下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。, I. U4 H+ i6 A' l" E
我将就这个实例演示如何将该实例VBA代码封装成为DLL。
4 y+ f0 g4 U! R) y- y  z. w% Q/ M
! q& J' U! i; ?% e* q+ P
& E4 o2 Z: U! x' j) {
6 @( L( |8 d  I# `4 y1 r, E 按钮单击事件代码如下:
! |, ]$ A( P! S" b, O. DPrivate Sub CmdFindnumber_Click()
: o+ j/ j2 g3 v" `  H! b  Dim strM   As String     '初始字符串
6 K, `. G0 _! F4 |+ O0 W$ I$ z& A& u) T  Dim strOut  As String     '输出字符串变量
" c0 r5 U5 L1 N" e  Dim I( h  n( c# F0 I! V3 K- ?
  
6 V" ^' M2 p9 v; \, R7 s1 T9 G# k9 E2 o  strM = Me.Text1/ K) H' o" `) p7 h) I
'从第一个字符向最后一个字符循环,以提取每个字符
: Z( T  ~( n' k" P2 }  W  For I = 1 To Len(strM)& o. K) I- \6 n" ^2 E/ j! f) G
      '判断是否为0到9字符,是则赋值输出
1 }+ `3 E3 F  b7 ]" v/ J! q      If Mid(strM, I, 1) Like "[0-9]" Then
4 H: t! y3 k( {5 k" U3 F         strOut = strOut & Mid(strM, I, 1)
9 e. m# H3 i* O      End If
/ R9 t- |3 ]. L6 x6 E  Next I
. Q" u" N; k2 X, ~- n( Q- n7 {8 g  '用MsgBox函数进行输出测试
: [+ V  L3 J) I% a; s& R  MsgBox strOut0 F# d/ _  \( X2 v6 R
End Sub
% w/ D9 s2 f' l    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)
8 h' w& I: x4 \" v4 [1 R
! F$ S9 D9 ?" X, R(二)VB封装实例中VBA代码% h! h( o2 L3 |8 ~9 N: }
步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口
9 A: r& T' w6 K5 @: [8 _* g: h  p8 u. F
8 J! a8 I: y/ `

  A! @" p, z! N- f1 ~! i" z
7 k' o- `3 h, W) f; h* a+ n: T$ S  F' a
步骤二:修改工程名,这即生成的DLL库名' S: j' ?+ c9 K& P: u  T/ b1 L, q

* x/ q7 q# a& C+ Q5 r, f2 T5 i; U4 \/ W
7 I* W4 ?; a7 ?5 R, E% X
. \6 b6 S4 D& {& j+ |5 u2 R# Y1 G$ n
1 Y2 v/ G' z5 Q: y( g0 B/ J
步骤三:修改类名* ^3 C) V! z4 P( b: ~4 n  s% B

3 f" n3 ^4 w+ F* P& ]1 m$ Q8 d" O
1 L1 ~7 A7 a; e/ w0 f$ [5 Y+ a: Z6 _# Y0 o

- p+ M6 R$ ~+ L1 y步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口
1 G" n! l: G  E. I6 A
% s) g; }/ K$ _7 h' N( R4 @3 f! T2 ?+ u$ J- K2 z
8 |% L& I! Y$ W2 v
代码如下
5 C$ G- f  Q: B+ A'将这前的ACCESS代码改成一个公用函数
! a* ?; o; S2 c, Y! j'输入:strPutString 字符串变量,需分离数字的字符串
5 O! U. R: K' N! z% g  L" R'输出: fFindNumber字符串变量,得到的数字字符' K, b: C3 {) w, Z
Public Function fFindNumber(strPutString As String) As String
- g' F0 x( H1 [) Y7 x/ z. k5 K   Dim strOut  As String     '输出字符串变量/ V5 W7 C6 g3 C/ L* |. K# o3 h
   Dim I1 k2 c/ a7 L! T! {. X& O
  + M  D! \% g+ p* A1 W
   '从第一个字符向最后一个字符循环,以提取每个字符
7 D' U% H) u+ Y: K: P9 H! \   For I = 1 To Len(strPutString)
& e( ^2 v5 |4 \# y3 Z. G      '判断是否为0到9字符,是则赋值输出
) x) M9 S2 T2 W! k* ]       If Mid(strPutString, I, 1) Like "[0-9]" Then. D* L* e7 b5 G! D& z/ F
         strOut = strOut & Mid(strPutString, I, 1)
9 Q9 d! _9 y7 }       End If- h6 }& q( U/ ]7 ~4 j$ F
   Next I0 q0 \. H4 h! d
   '数字输出, P1 O6 {: [# l* E8 h& C' w
   fFindNumber = strOut; ]" f% P! {7 O- D* S
End Function- d- w+ p0 x. M+ g) C
, z. k8 Y& Q8 a+ v9 p
步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。2 `7 G' V+ s  c1 S

, h3 j$ b' i, ]7 j* \, w- R' e) W三、        在mdb中调用自定义DLL动态链接库( S+ b/ [0 F) f: _
" [) ^4 U$ A% a4 p' K3 p$ f( @3 H
(一)新建数据库及窗体
% x5 P* J7 j, k; J7 W& c5 f0 j新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
7 [: f* F. M" T1 ~9 z: ?3 P: X# Z- h% k9 m+ Q+ x9 z
$ W& Z, Y  ?4 I, D* G4 a) C8 {
(二)引用【我的动态库.dll】库
+ o, s  _: w' C按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。
# {2 T% q0 w* n; N7 N/ @9 X" g0 d! V' M: T; {5 ?

* O* e- T5 |# u2 D+ s* K/ k6 k/ [. E2 Z  B; M7 a" X5 o
- y# ?- f3 b- _$ a0 {1 s
8 }* C! j8 E+ Y3 ]+ D, g: \
) c9 m* B+ Y% ]; `% `" i# h- g
9 h- g- N: z# T  J6 K7 t2 s

2 k  l+ Z9 K4 X+ D4 M+ e8 e* M! T3 P) K8 B, O4 g/ c3 L7 ~# `( d

- c- O4 u6 c2 F! G/ E4 ~(三)在【CmdFindNum】按钮单击事件中加入如下代码。% g- ], T" `0 y" Y" k. t$ I$ I
Private Sub CmdFindNum_Click()
3 d; H8 p+ e8 n8 w" w  '申明自定义类
; L" V9 k; g6 O7 C7 O( n  Dim MyFindNum As 提取数字9 [; J" o" f3 r1 S* j; ]
  Dim strOut As String! ?9 a% a' Y- {: `8 [* k
  
8 C7 K7 V9 k. r1 M  '实例化"提取数字类"对象. w) L8 u. A/ h* t: U  z- Z
  Set MyFindNum = New 提取数字# h% j" I' S, ^! J" d
  '将函数输出结果赋值给自定义字符串变量
- Y/ w+ O' c. ^* r  strOut = MyFindNum.fFindNumber(Text0)" m4 ?. J4 w/ s
  
7 W0 U! g; ?+ [8 z$ P  '在消息框中显示
( A; q/ v: f9 F' g' o5 H2 e  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"0 U) \& {; T3 ^
End Sub
7 C  p% L. |3 V; }5 k6 I/ d( m$ M  s$ J9 h$ w
点击保存后,你就可以运行一下窗体测试你的成果了, `1 o2 h5 U, D* H$ Z- ~
 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。
& G9 g$ z0 H9 m1 m  Q3 Z6 d" i0 z  U$ Y7 q! I  R

+ N' E3 i& |" \* R7 h9 d

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif
% M2 [/ `! q0 L6 xVB封装DLL实例讲解(一)
& S* O2 o/ U. J6 z6 u# G/ h, @
十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit3 |7 L8 x4 q( D$ V# _
Implements SWPublished.SwAddin# H# E3 t, `/ k( p- z
Dim swApp As SldWorks.SldWorks! a7 N- P% E( G: b. n! Q
Dim swModel As SldWorks.ModelDoc2
, D* q/ |0 y8 P5 ^. yDim swCookie As Long- l# S6 ~7 I) |# ?
Dim swToolbarID As Long% C; a) n) j  i7 w: q9 m! q
1 ?% }8 f, G' S2 x' [- d
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean/ r( ~. n" O5 [
   Set swApp = ThisSw
! E" ?# \$ _/ Q   swCookie = Cookie- {6 [9 J9 j9 K5 U0 @
   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie' F2 j( n! Z. z- f. u
   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5; E. i( _5 u+ N3 z. s" \
   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","' S! |" U' X' d1 J
   
( b+ j( D0 u' b- ?, OEnd Function8 \8 @: ^) E" t6 K
Public Sub Block_MenuCallback()$ |! j# a8 o( J9 G
  Shell App.Path & "\螺纹联结标准件库.exe"4 e( k+ ~5 D+ `. J
  Exit Sub3 b( A/ `2 g, O' ]8 M3 T
End Sub# V$ s  g( q- e. O
Private Function SwAppin_DisconnectFromSW() As Boolean
8 p9 E0 R8 P/ e( @6 T        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
9 G0 Q5 z, w! t) X; c9 e0 z        
% z8 A7 i5 h1 U2 C, PEnd Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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