QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2413|回复: 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 编辑
' x9 G3 B0 x. |0 ~, E
7 A, n* l; x* H5 i) S. n% rVB封装DLL实例讲解(一)/ f& y  k) f& Q4 r3 z! o) z8 W. p

; P) n4 v: L9 f! x( l- P8 W/ U* h8 `  l
一、        DLL基本概念% U9 Q6 U) J" k( O4 U" N" i3 A2 b
(一)概念- B8 y* j, T+ w, P: l! H+ u
DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。" y5 Y. a+ {+ U( X
(二)主要优点:
6 D- b4 U$ X) x/ s) w1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;. f8 s4 I1 |" q0 K) g# Y8 L
2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;
! i; z5 a# _" }& T3、从ACCESS角度而言,还可以更好的确保核心代码的安全。
. X+ R% {! R* \4 h9 o9 X+ q
' \9 n- J$ W7 j* `二、        用VB封装VBA代码,构建自定义的DLL动态链接库! A% g8 K0 s! y  Z- i1 o% [) ]5 A
(一)ACCESS中实例代码
+ _! h/ j8 W* e- y下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
9 x0 X0 C1 a$ Z$ ~我将就这个实例演示如何将该实例VBA代码封装成为DLL。4 x) ?" w! o: a# w+ k$ f0 B
( D$ I8 B8 N2 l4 ^2 l
/ z; T8 s0 O3 r- ?# v

! E2 ?/ P: t$ l. { 按钮单击事件代码如下:0 a' l* @% V. S$ M8 K
Private Sub CmdFindnumber_Click()
& D, b+ O* ^. D/ e6 s; u8 j" j. F  Dim strM   As String     '初始字符串
  }) R7 l+ M7 u: r6 I8 z  Dim strOut  As String     '输出字符串变量/ k. d3 d& D( B) F! |1 {: ]5 n
  Dim I8 a5 s* u9 v# ^) r. s( q
  - ~0 {% o3 H: i
  strM = Me.Text1
) g! z, l9 a& g4 m& J7 v'从第一个字符向最后一个字符循环,以提取每个字符
" H4 j& ~# Y5 V2 p; _  For I = 1 To Len(strM)3 e3 Y3 s% @% L$ v5 H5 I; Y
      '判断是否为0到9字符,是则赋值输出4 u6 T& W+ [: |8 L' M
      If Mid(strM, I, 1) Like "[0-9]" Then
7 H* ?( t# U- y% `" U5 D4 x         strOut = strOut & Mid(strM, I, 1)
3 J; W5 U# g; |' q. w. l      End If; s& Q& Q$ ^/ M$ v/ V# A9 x/ O2 w
  Next I
3 }0 U9 G" v8 J/ L8 p+ t/ |  '用MsgBox函数进行输出测试, g: U& t$ g6 v1 b1 r  A
  MsgBox strOut
$ o- W: n  [; s* P: rEnd Sub; a3 n* K7 c% e, V% H0 J
    以上代码还不能直接用于封装,须将其修改成为公用函数(过程). s* g; X! U* H. F

  \- e$ O2 q9 X4 C(二)VB封装实例中VBA代码
2 S, H/ k* u" }" U- n9 w# R步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口( R5 d3 |9 w4 `

8 L( q8 k9 b/ _, }1 ~
( p, s$ t% E  d* L: m' ~! o" s; e3 g, z/ }( @
3 I5 b  U9 j$ M  \# L+ Z

( J4 `+ n) T/ b) g) M步骤二:修改工程名,这即生成的DLL库名
: E2 g! c* |6 X9 z1 {! f/ T% m; q- E! Y3 f) d! N  ~( ^: M1 F

6 `/ N: H* k. X# C# n' f' a  y, c, Z# P, l: {
* y( ]2 P1 k8 Q/ C2 j6 q' E
8 }, Z) D3 t; m
步骤三:修改类名& y* f; j4 k, q( I7 Q: Z

+ x9 l6 }8 h! i' `5 Z0 _( V4 t1 J3 {- @  C, ]2 y7 e& }7 i
5 x2 Y0 T; I! x

6 w. ^; T2 u9 b6 S步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口
; |+ |* K6 f1 I/ g8 ^6 I# x. Q9 z5 A! k# y" k% @

6 y9 u7 n) w! T! d
& E( q/ M4 r; }" \1 f代码如下
4 a, f  @* \: f+ t6 ]% o9 D'将这前的ACCESS代码改成一个公用函数
; l% s8 Z, {( k& `5 U'输入:strPutString 字符串变量,需分离数字的字符串
; x6 @6 W% B! l8 p, W& A'输出: fFindNumber字符串变量,得到的数字字符4 H. U0 D1 {3 T& I% i
Public Function fFindNumber(strPutString As String) As String' ]* n% |7 r* M* Z8 f1 H$ B
   Dim strOut  As String     '输出字符串变量$ g( {( r9 K) g( o/ z; \7 n
   Dim I- t5 o& Z" \  r3 c5 q8 T# w# t
  
: E! f% N! o( F   '从第一个字符向最后一个字符循环,以提取每个字符& D  n# d' @4 R  C& H
   For I = 1 To Len(strPutString)
4 j# `) I7 [+ i4 v3 J      '判断是否为0到9字符,是则赋值输出
- D: [" H2 T/ R9 ^       If Mid(strPutString, I, 1) Like "[0-9]" Then9 ^$ K% q0 B. t( R
         strOut = strOut & Mid(strPutString, I, 1)% x+ R' l# G" r+ u" j# W0 V+ C" K
       End If
) w6 t* u4 N, [8 E0 [   Next I
. B/ D) q) a* m, q9 E6 T   '数字输出& j7 b$ V3 M/ @# C" g2 ~) B
   fFindNumber = strOut6 X9 r# d% c7 ?9 S
End Function
$ T$ Y7 W7 a( }/ D6 a; y- @  N& h, ]. |; n$ ~
步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。% t( V' P. L" }% D
+ C" {7 x$ g( P" i1 v3 A! s+ R6 W
三、        在mdb中调用自定义DLL动态链接库
! F4 x& e8 P* N+ N
1 S4 g# r9 e% \8 ~2 L( ?5 F(一)新建数据库及窗体, Z  L" F9 B) z$ w* K8 J' U
新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)& I( Q, X# H. @; g! y' v5 j: V

1 w- M4 ~" _: ]8 i
6 y7 P+ W; v/ u(二)引用【我的动态库.dll】库
! A3 n% A6 V* e! d' [按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。
) j) r; `! h( G2 O. G* i) Y# o4 q3 f/ Q
3 X+ F# Q) k& ?; J2 V$ k
/ \; l3 |0 _0 p' Q) g8 j* J8 J( B

  z- E/ }, M* G/ F6 l+ |7 x- @& k9 m& [% |0 M4 T/ m

' P( i+ n. g1 f( y* P
/ Y, K/ l( E2 V  z
% X4 N7 E/ t2 p7 |" f0 J" C, }* P  y7 A; H( F! Q' J3 ?
1 t7 Z' O; ~- m3 H5 l, e
(三)在【CmdFindNum】按钮单击事件中加入如下代码。
( L7 E$ b1 l) \8 oPrivate Sub CmdFindNum_Click()
# @0 h  |" |  B, G9 O9 R4 I: \  '申明自定义类
3 ^9 @! u2 H2 `3 z) S  P  Dim MyFindNum As 提取数字
1 k! ^+ e9 S0 v- i- y  Dim strOut As String
* `% ?# C. |, u0 h( X  + R( s. r9 v  x; v+ D# e
  '实例化"提取数字类"对象
9 \! [7 t# a/ d  Set MyFindNum = New 提取数字
& l8 k6 U$ t' v0 @  '将函数输出结果赋值给自定义字符串变量
2 r+ x' g4 A8 M* h  strOut = MyFindNum.fFindNumber(Text0)
5 ^- l: y$ H! N6 N) E9 b* w  
1 l4 s0 y5 k" b  '在消息框中显示
& A# Z. i" l! H/ R- @( k  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
, k: U" v# R4 r) z, kEnd Sub
$ E7 U+ Z- Y( V" D6 x6 t- x; b7 K2 y9 a2 k8 T. a- D  ^4 I
点击保存后,你就可以运行一下窗体测试你的成果了9 \7 }- @* H* I7 h
 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。
/ k$ c! z% r1 G$ m3 L7 l' z# A
! L: ]) d/ {  Q7 h- }
5 G/ x9 A! q4 C- V! 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
+ ?* f" `4 n  J  W+ bVB封装DLL实例讲解(一)
) }: r) l; Z4 b1 Z$ X; n7 R
十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit9 \0 ~( C& P* s8 v
Implements SWPublished.SwAddin
) V" Y0 C& I9 r* ~! X, i7 a9 tDim swApp As SldWorks.SldWorks9 n4 r# a1 f" Z  d
Dim swModel As SldWorks.ModelDoc2
; w' O/ r; C5 n9 O5 N) KDim swCookie As Long
" |) P3 V3 W) f7 n! o+ P" q) ^! i8 rDim swToolbarID As Long
  A1 l) T/ B2 q+ J% ]+ W5 j* R+ F+ H2 G6 C) x+ C" l
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
$ P' L$ u6 F) K. v* `: Y4 ?6 W   Set swApp = ThisSw  n# k. P% V/ y  [; f) w9 k
   swCookie = Cookie8 @) g3 b6 v2 }" b4 _3 t2 K
   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie
# H* C2 W1 |3 v' ^( T   swApp.AddMenu swDocPART, "螺纹联结标准件库", 59 K+ t( F0 d  n
   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","
5 x8 @5 D7 g! I   
8 c! y$ }) Q0 L4 Q; }End Function
2 E3 d8 d( l, e4 i# M# y, \Public Sub Block_MenuCallback()
9 u% o# ^+ O( \+ G8 S, j. R' a' O  Shell App.Path & "\螺纹联结标准件库.exe"
$ o/ I) S- ~- C8 b5 U# z1 b  Exit Sub% X- ?$ l5 f7 Z
End Sub( n7 @" l: p1 ^9 T: E
Private Function SwAppin_DisconnectFromSW() As Boolean
4 e% M6 E; L; p8 I7 I: X+ i0 j. L        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
2 x5 [+ I. d# M$ r* t        ! ?; X5 P- f! y+ m% u8 c  s2 o# g
End Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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