QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2511|回复: 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 编辑 / J/ ]7 l- s2 Q! V4 {! D
& V4 y6 U+ m9 v- @# S' _
VB封装DLL实例讲解(一)8 P# m% [! i' Q

/ l* `+ O* h6 r9 c2 e) v! w9 z5 N' P% u3 C% q; z6 }- k5 u: @
一、        DLL基本概念
6 W& @9 s* C& I5 o- F* i(一)概念
( @7 |, y' a* d" ]& T4 G' X' ?DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。
) k$ N. p3 v( P  }1 h(二)主要优点:: H: v- t7 O3 k8 D
1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;
* R8 A  Z9 J" o: Y2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;5 a& c* K, `! Y! w4 H
3、从ACCESS角度而言,还可以更好的确保核心代码的安全。# M$ X7 U! Z6 p4 o4 C
, N* i8 a4 d4 m$ z( ~0 I. t0 U' f
二、        用VB封装VBA代码,构建自定义的DLL动态链接库
# a+ j5 z& J( Y+ @+ @0 s2 u8 \$ E(一)ACCESS中实例代码
7 Z+ u7 E4 _* A4 E- n下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。( B% |6 H( z: N1 R4 i  L# B
我将就这个实例演示如何将该实例VBA代码封装成为DLL。, B& A, z) N9 a) j
1 M5 L! D( a5 Q6 M* y

0 V$ }/ @1 m9 V" g# w1 u4 }# f
0 e$ z9 l" Q/ Y2 J7 p  o 按钮单击事件代码如下:
, l0 y' L4 D- v- ePrivate Sub CmdFindnumber_Click()8 p$ j6 l) [+ ?; y
  Dim strM   As String     '初始字符串
' }/ a$ q3 R& h8 c5 z, q0 o' A! H  Dim strOut  As String     '输出字符串变量  V4 w6 m3 S" N6 o7 f
  Dim I
8 J) v5 J5 D8 W# J7 b+ Y  , ?9 {6 [) z0 L# Z' w7 x
  strM = Me.Text1
1 C- F, g9 r2 y2 J'从第一个字符向最后一个字符循环,以提取每个字符
. I3 }9 G$ w2 M2 {9 V# h  For I = 1 To Len(strM). L1 c; y3 d. o" N) |' C0 k
      '判断是否为0到9字符,是则赋值输出
" |( Q* \; A$ M, z9 P      If Mid(strM, I, 1) Like "[0-9]" Then* P* Q; h0 i& Q) v# O- V
         strOut = strOut & Mid(strM, I, 1); z3 B: C6 q; ], ~
      End If! m7 D5 a, A; e# Z  {
  Next I* w. c, R- J( a1 ~! `
  '用MsgBox函数进行输出测试
- I- e; p* h! o( Y+ i3 m" x  MsgBox strOut
7 @0 g9 ?% m# X! sEnd Sub5 D0 `. F. |! [3 e' v
    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)
3 q5 U/ q, X- T: D! w; e- K4 |7 R: B( G9 N: |% H
(二)VB封装实例中VBA代码! T7 ?, U$ }! Y2 f& ^9 E; N
步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口. o. O# m7 \  r. G; L
9 P& t8 Z0 i) j5 T
3 x3 ?! _- Y! B) {0 g) F

8 ]0 _* ^/ B1 j6 g. V! y: e" H* b  J5 o* \; H: \

$ {( F0 T( G+ S/ v, N2 |  t步骤二:修改工程名,这即生成的DLL库名
% ~" b8 @5 m5 [
; X! V* y, N. b) d  q7 d: ?% d
5 m, I' M* V- S
  m8 J  Y0 [+ g* x6 j* y; ^: x) C# S1 l

6 R/ J0 F! G7 f2 U步骤三:修改类名( p: U5 L, F9 ?& K

! v- p" t& ~1 p0 x* u; @8 F) u$ @6 p6 h

8 u! Q3 ~- ?, R# [
2 K" |, L  r' k, E' a0 b* b- ~8 K步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口
& @+ q1 o$ `; s5 l6 W  g( F2 P5 n1 f' @  S
7 A9 p/ n; ]; y8 |; S

# m9 D' c- V1 [8 S4 c+ z# e/ V代码如下* x; q! Z1 Q" u# b3 e
'将这前的ACCESS代码改成一个公用函数
6 j- _/ P$ ]8 m+ A'输入:strPutString 字符串变量,需分离数字的字符串
5 A; ~5 b- b3 @" r'输出: fFindNumber字符串变量,得到的数字字符
/ V- y1 g! @+ f' |% c) vPublic Function fFindNumber(strPutString As String) As String
6 N6 x' i) L- g* D! v   Dim strOut  As String     '输出字符串变量
8 Y* ^! z- V: r# s9 W+ O+ G0 W   Dim I2 `" W8 D" ^' y0 q$ Y# T" c
  
  A( W: Q$ r8 N( j   '从第一个字符向最后一个字符循环,以提取每个字符% V1 D% Z( j( H0 o7 p
   For I = 1 To Len(strPutString), x7 O0 z* y! }9 v
      '判断是否为0到9字符,是则赋值输出
! Q/ f$ A+ A) a6 x1 j! u       If Mid(strPutString, I, 1) Like "[0-9]" Then
6 T6 C, V) Z! Z# X. _) r         strOut = strOut & Mid(strPutString, I, 1)
* U% a3 `* ?) q       End If
7 U" l. E9 P2 r   Next I
( ?/ L, w% T6 i' J6 i: y0 w   '数字输出
" a# S1 F5 [+ Q3 D   fFindNumber = strOut7 b) U: w3 d9 `4 c: ~8 A' _1 Y2 X3 j' B
End Function
7 R1 {7 e0 @4 z: z5 C5 c. G6 E. _
步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。
9 Q: h7 P3 y4 h8 V3 P
% o" O' e7 m2 f  n1 n三、        在mdb中调用自定义DLL动态链接库
) ~) B* ?$ l, h) s
, U2 G$ u0 n% j& g2 T$ O(一)新建数据库及窗体
4 E! o. z7 Y0 g4 U新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)# |' @) r; K9 m  X" D+ W3 C, y
/ z5 g3 E+ F. K3 D8 k

8 I' m9 _: v2 f9 t9 c# U' Z9 i(二)引用【我的动态库.dll】库
+ t1 k1 l' q/ w按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。
: W( [; Q# N, U& I+ @: I1 Q6 j9 y; o8 Y7 p
; ]4 u6 r2 ~8 S, E* x# ^

  a7 m9 q& C/ k. w$ E
) }% p( c! J- ?
! t5 X1 {' `" L' U% W1 H
% E" u5 I# B: Q6 T/ k
6 ^2 e" }; {1 \! w% [1 D, G3 P# M% \, X! M- }1 y

1 @* X0 s, \9 A' \% ?* z# ?  m( F$ S7 ]
(三)在【CmdFindNum】按钮单击事件中加入如下代码。
( o. w! q7 q' b# p# }0 I% SPrivate Sub CmdFindNum_Click()* [2 ^) ]  q; q* A3 _! O# R
  '申明自定义类
- F. W" R( x  N  Dim MyFindNum As 提取数字
6 @! P# P2 b+ A& m2 Y  Dim strOut As String$ E- @# [& F  L  y9 o# D$ I
  7 j2 a% z1 b6 P6 F$ h  E
  '实例化"提取数字类"对象; {) N/ H( B7 r7 c# B1 b
  Set MyFindNum = New 提取数字
8 r2 d0 e. _) Z  '将函数输出结果赋值给自定义字符串变量
0 K' C0 E4 x" a# T" U2 y  strOut = MyFindNum.fFindNumber(Text0)
4 ?" R; v/ V2 O1 L- u- i. _7 y  
0 I" V1 m9 S7 L( ]! n  '在消息框中显示9 \9 z$ C, n6 \, K5 I& {1 z' {
  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
* U5 ~* l1 v: X) T" s; l+ IEnd Sub
- ~/ S8 ^+ k- _2 R" _9 W2 F3 G) h6 D9 i( s/ q! S1 m
点击保存后,你就可以运行一下窗体测试你的成果了9 g- C5 w$ Q7 m& D9 r* g
 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。8 L2 J' M' x9 O; q% u

7 F) \" A8 V5 _* r& [3 B+ Q8 C( O
1 U& r3 W) j# G: @% F* R6 z( i, z

VB封装DLL实例.rar

139.48 KB, 下载次数: 5

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif
* [( p; c/ X# a' X2 p4 IVB封装DLL实例讲解(一)

+ i  O" h$ H% Q/ a" k十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit
$ K0 |& J- C$ A, AImplements SWPublished.SwAddin
3 |) J7 @$ |# U% w4 s% JDim swApp As SldWorks.SldWorks
# B  F- j2 a3 _Dim swModel As SldWorks.ModelDoc2- N4 l7 h, U( i) p$ N
Dim swCookie As Long
) l4 ?; ~$ M5 ?3 PDim swToolbarID As Long* z- m* A& z% y5 ?6 ]4 i% h
# Z1 [7 }8 u, H& i* _
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
. E4 ~4 r6 L0 k4 N7 N+ N3 s7 ]   Set swApp = ThisSw7 |) u  b; ]5 ^/ o
   swCookie = Cookie- m0 w, M& }: l/ ]
   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie
5 _9 U7 |4 v3 D8 ]1 [   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5. J( e3 s  M) z+ G4 S3 H
   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","2 R1 K+ t. [7 E2 G
   6 m: r5 w: y; V% m4 k
End Function1 W, g" V! w6 [, a0 S! M& @0 u
Public Sub Block_MenuCallback()
8 M3 Y$ l- v; G' U) @  Shell App.Path & "\螺纹联结标准件库.exe"  d6 D5 ]1 t  S  D
  Exit Sub1 W, T6 l4 N9 U7 y! A) L
End Sub
1 n- x( g& q5 g* i  i  b2 ePrivate Function SwAppin_DisconnectFromSW() As Boolean. v: J3 {- C1 r1 \, _7 G
        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
9 g; S$ ~- R! r( N! T& a5 E! x        $ K: i0 m- U. C! X
End Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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