QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
4天前
查看: 2423|回复: 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 x: J: i7 s/ ?, y8 r8 r

( H& p8 A" R6 |$ L; jVB封装DLL实例讲解(一)
  u( H# `+ K6 a# l+ ^  n
5 a% f9 |3 s7 C9 M- M
. f! b. ~4 d% h: `/ S7 j% }" E9 r% T1 t一、        DLL基本概念+ L$ ]3 V0 F$ c: `
(一)概念; X8 Y, d" B5 l+ H* D" _. W
DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。8 Q- e4 M' m4 z+ `& g8 p' R/ m
(二)主要优点:5 N+ h" E: ]) u, l, d. G, L: c1 P
1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;& {0 g: c% J  N) W2 N# M1 |
2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;5 c" r) A5 C2 q2 l
3、从ACCESS角度而言,还可以更好的确保核心代码的安全。3 j) i& w3 v2 }
: d! v- H; x8 J: i  |8 t
二、        用VB封装VBA代码,构建自定义的DLL动态链接库, H) y# D+ T+ k# c
(一)ACCESS中实例代码
3 E$ x: J( p/ _5 c下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。% ^4 T7 J. k1 o/ j6 {, l
我将就这个实例演示如何将该实例VBA代码封装成为DLL。
) ]; G0 }: S. |$ C$ j0 b 3 @" e8 P8 Y/ R9 K7 U
4 _& g: \% ]3 [1 E
" \- b1 X) A4 I9 W- [
 按钮单击事件代码如下:
  v# W" t* i6 T% `3 Q) i( X0 h9 yPrivate Sub CmdFindnumber_Click()2 s9 D, P$ @/ u; Z
  Dim strM   As String     '初始字符串8 ^3 x% g* C" D; t( ?  c
  Dim strOut  As String     '输出字符串变量
: S; {7 Q7 u' \. p  Dim I) K- n4 T" ?9 p$ g$ l
  - c  f% V0 k% T" n0 D/ Q# }
  strM = Me.Text1
% Y3 w" [8 N5 |5 w# T/ Z'从第一个字符向最后一个字符循环,以提取每个字符
* @& X5 ]& K5 S+ V& M7 s  q  For I = 1 To Len(strM)
1 @# [) x4 ^$ N4 ~      '判断是否为0到9字符,是则赋值输出
7 o- j& F" H3 m/ X      If Mid(strM, I, 1) Like "[0-9]" Then. e; R; I% F9 R# Z8 l) T, Y2 E% T
         strOut = strOut & Mid(strM, I, 1)
: C. U3 x  d7 }( T, ?$ h      End If5 B& e1 C7 x- P6 W6 H9 Z2 z2 L8 ^
  Next I
' P5 h0 U3 @6 V/ Q: Q" I  '用MsgBox函数进行输出测试
  K5 q! |$ W9 o3 D/ s( f% B  MsgBox strOut/ A, k: q; _/ m! ~: M6 s
End Sub
6 Q/ d) ^* h: Q    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)' h* S7 M, A0 n( f3 ^3 Y

( Z) Z/ @9 e  m& p& h: c7 ?(二)VB封装实例中VBA代码, }+ u; ?) k8 j! W6 n  d
步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口! D9 X: a8 `: s/ l1 p+ A( [( t9 o
! ~5 K! ^3 V/ ~# J
% L6 i& w8 N: e8 y; Y  ^* G. c% H* N

- a" o: J  I' M% {' {# h& k/ m4 z! ^/ L

7 Y/ E. \% U* x. ^- I" B9 L步骤二:修改工程名,这即生成的DLL库名1 W; b& f7 _# c

! R: s- s8 N4 `; o/ T6 |+ M* \9 D. L) o1 i- K
4 a; r: L: R6 U8 o
9 M. T7 W$ w9 i8 k* i7 V' I
/ R1 ~: e" c1 o  g( R
步骤三:修改类名
+ F# d1 \5 ~. @( b2 K9 U" U4 T& s& Y1 M! f& z

, I% ~" e/ j. p+ y/ I: d* T% l9 Q: s3 C3 a) b4 f* V
- M! `. m9 `: Y1 |; W, b2 _
步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口# o: B5 N- w0 E
* {$ a  `  \$ g( b* ~

, j; ?0 f0 K4 @1 d( T, c( g( s+ y  U7 d$ F1 j: F
代码如下
5 U# z7 b% v& U* R  S'将这前的ACCESS代码改成一个公用函数+ z. p5 P. w, ?( b1 V. T/ E6 K" P
'输入:strPutString 字符串变量,需分离数字的字符串8 m  N. ~8 t. i* x) Q. P
'输出: fFindNumber字符串变量,得到的数字字符
3 T$ k- |( B6 |  r1 S& hPublic Function fFindNumber(strPutString As String) As String
3 T/ h& A1 E& C5 }; o+ K( p$ f' K   Dim strOut  As String     '输出字符串变量
0 m/ [8 z/ ]; y% Y   Dim I
5 _  n7 v4 O* s, u  
: M+ T1 t, ^0 N   '从第一个字符向最后一个字符循环,以提取每个字符
3 f( I5 P! M5 M, H   For I = 1 To Len(strPutString)
* }" ~: a0 T6 Z+ z. p$ z5 K      '判断是否为0到9字符,是则赋值输出
4 Y+ X7 c5 l" e0 L       If Mid(strPutString, I, 1) Like "[0-9]" Then6 X6 |& `$ G# b8 w, w
         strOut = strOut & Mid(strPutString, I, 1)
. Y* H$ v+ e2 i: ?8 ~! ]       End If
7 n$ G$ n: v- r* y) X% n. b- k   Next I0 w7 [& F- ]4 z4 S& P4 d/ y
   '数字输出
$ d+ k: A, @" r& k1 o   fFindNumber = strOut
4 |) o0 U% D( [End Function
3 s" y3 a/ T/ y+ K3 k( C; r; y: V
( U1 ?6 j  q4 {* [- J2 \步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。, \& J5 y8 p$ M& k8 S5 e( Y. J
) V- a' Q5 F0 J: `' B
三、        在mdb中调用自定义DLL动态链接库( A7 A/ m+ S; B6 F+ V4 d4 w
8 O1 j' c7 S6 ^4 K+ q5 x1 k
(一)新建数据库及窗体
! }- f# F6 U8 B9 I9 v新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)0 i! j& f! q0 @- u) G% T
; x" A) ^7 U0 Z$ B

' k7 }6 _) S0 U(二)引用【我的动态库.dll】库
6 h/ \5 \- |. c4 ~: Q. Y, C按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。
1 W5 o, Z; }3 j7 ^3 f' r9 A6 x0 b
, G7 ^1 {- L! x0 \* X/ K% v
. p  i/ H# {- n# ^$ D  o
1 Z  h  C8 D) n; Q2 D: j6 p* B8 u9 A1 D- r" O; Y. F

' i2 D5 Z) y' c: q5 b$ P6 G1 Z/ U! o/ e1 R2 J% f: j: b

0 c: O. ]4 n& a! q; f. N/ [
5 o; a3 q6 I$ I3 g8 {
; D3 @$ D0 a( q1 Q; \! @
9 @: ]$ |8 U+ o0 B(三)在【CmdFindNum】按钮单击事件中加入如下代码。" T: d5 m& X! r5 f7 V. z: R5 u
Private Sub CmdFindNum_Click()6 q5 p1 _  N. h8 T3 i" F
  '申明自定义类
# |) e7 M. ?% o* l" {+ |  Dim MyFindNum As 提取数字
& c, Q; c. N# V& B: Q. H/ z  Dim strOut As String
4 k* C5 b+ K! ~  6 x: k7 b7 T8 E4 }$ L. n  e
  '实例化"提取数字类"对象* d3 i" H6 j/ f
  Set MyFindNum = New 提取数字/ p; W3 c( Y* n6 W; \
  '将函数输出结果赋值给自定义字符串变量% b9 C" X/ e3 v  S
  strOut = MyFindNum.fFindNumber(Text0)2 X  @  T3 ]+ p; W) q
  
( k/ P9 L, ]0 M( Q& }7 ?" E  '在消息框中显示
& }0 z/ X# s! i% t! U! A9 J  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"+ U" @1 M: `/ i+ c
End Sub
$ }! \8 b5 B$ ?7 t5 Z2 E; T$ c
; W; `% D% Q! k3 ?点击保存后,你就可以运行一下窗体测试你的成果了* Z! [% c% R; U' n" A" N5 U3 v
 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。
; f1 B+ X5 V, V& f- u: k$ e$ s7 B" ~2 s" u% G  i. I) N

. f3 z) W9 c4 t: y5 T. V

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif, l# r( b& L) ~7 G8 v7 f
VB封装DLL实例讲解(一)

. T$ s( i3 b0 w3 i! s" H/ y. |十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit% @1 r9 ]* y0 e) C) X0 N: W
Implements SWPublished.SwAddin$ B5 f7 Q6 a2 }; L
Dim swApp As SldWorks.SldWorks
$ j2 C3 |! `. o7 bDim swModel As SldWorks.ModelDoc27 _% N2 W% B# y6 g9 Y  J
Dim swCookie As Long- ?$ t; m+ `- b1 S
Dim swToolbarID As Long+ ~, @7 |0 w: q4 ?3 c) C- |
/ W8 B4 z# X9 ~% h
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
5 k) B; F) ]' d2 m8 s4 t   Set swApp = ThisSw
- }8 C/ E& P1 u  y   swCookie = Cookie
. N0 K6 j3 |& L) O" G' D5 \% }   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie, D- [# V& O3 e
   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5
: Y, W$ l8 _6 a. c  O   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","% V* P6 U# }9 R3 k0 M/ d
   
; m. T5 A) m7 l; n& P2 EEnd Function
6 c; S& F2 W, E* v5 ~" l- bPublic Sub Block_MenuCallback()
# `) o$ G4 D" i5 I- ~6 U2 R2 {+ x$ P  Shell App.Path & "\螺纹联结标准件库.exe"1 r# k; O# L+ J8 p) Z
  Exit Sub
1 j% j/ s/ c. A8 \End Sub' g9 m* |7 i; A( B- `# o. D) d
Private Function SwAppin_DisconnectFromSW() As Boolean
5 }7 P; o2 R3 }: e        swApp.removemenu swdocrart, "螺纹联结标准件库", ""+ H# I" A3 H9 M# r5 a9 \
        $ @& Q1 z: }6 v6 N/ ?
End Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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