QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
1天前
全站
goto3d 说: 版主微信号:caivin811031;还未入三维微信群的小伙伴,速度加
2022-07-04
查看: 2219|回复: 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 编辑
7 j! ]! P$ m4 x: U/ ?$ g# m- N
4 h! z; y3 Q" T5 x- q3 e  QVB封装DLL实例讲解(一)  ~- {$ J( l+ j6 a. L" L3 f  V1 t

, Z4 G$ Z* F, O* ~& k0 \5 y3 ?( V9 R$ F, A/ m. ~5 \3 q- W
一、        DLL基本概念
1 [9 T& t( H& L" z( s(一)概念
/ J# n" d# h+ c8 M6 ^" ODLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。2 w$ ~4 B3 q% X1 Z) g
(二)主要优点:9 c" H3 x! o5 _8 u. p
1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;' ]3 V# v, n  l
2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;% d$ }1 a, z, \& E
3、从ACCESS角度而言,还可以更好的确保核心代码的安全。7 h. [' Y$ y* L2 U( {7 o( E
# t$ V, C0 p, |3 l5 B
二、        用VB封装VBA代码,构建自定义的DLL动态链接库+ g' F7 A9 c& O& @) j: J
(一)ACCESS中实例代码+ W, D4 u5 ?0 Z/ G
下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
% c1 @4 i# [* I; C+ U3 n; e$ d我将就这个实例演示如何将该实例VBA代码封装成为DLL。
1 f* {, G1 k$ U0 n4 p8 Z) M: B
# g" J9 X# b& K& f( x7 u* ` 7 c% ^; J' U9 p
0 `$ Q0 E- Y1 Y& ~
 按钮单击事件代码如下:5 T* W$ j, y* {5 S1 P6 [# C
Private Sub CmdFindnumber_Click()
: z0 j. }" `5 I3 L6 T! L4 v  Dim strM   As String     '初始字符串4 _. d( W$ e0 Z+ }
  Dim strOut  As String     '输出字符串变量4 ~6 B  |9 N3 Q7 d& E$ w, T
  Dim I7 C  A' j7 y' \/ \2 I
  
% j6 A  k2 R% P9 W$ e; |: V  strM = Me.Text1
0 Q5 X  P2 F7 u4 P2 `  t. ]'从第一个字符向最后一个字符循环,以提取每个字符
  U+ N  \5 g4 o2 o" X- ^% N9 s  For I = 1 To Len(strM)& U7 p; f) D$ v# @- \8 v( F2 d5 X
      '判断是否为0到9字符,是则赋值输出
& {* Q- n: O% y% ]      If Mid(strM, I, 1) Like "[0-9]" Then
0 |4 h9 h+ M' o% _         strOut = strOut & Mid(strM, I, 1). f5 |# K& ~9 M/ e4 f2 i. G+ g
      End If
4 o( t& ^9 B" ^* _# S" [  Next I
" `+ t/ o4 N. @+ \4 t9 j1 H  '用MsgBox函数进行输出测试
9 D9 I2 ~2 P2 `  MsgBox strOut
! i7 i# H0 X5 k4 O- [End Sub
+ V$ X- N: d2 [# v    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)
; Z* _7 E& Y4 H/ X
/ \( ^- R7 i# p1 K: t9 t  w(二)VB封装实例中VBA代码
  h$ H. P: C( }5 ~9 p. G( d步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口2 f/ \9 N7 D4 u! V9 t' c

" v. _% t) p3 {: o- x* `: y( ]9 ^

- U7 ]( U( M) ^2 z! M
) l+ k7 Z! _5 X. c! j9 A9 w; ?' c7 n
步骤二:修改工程名,这即生成的DLL库名2 A# R! p& x, U& a' m4 t7 d

& L+ Z9 r2 `& d! S) M7 d: h+ L7 i" g. E: E6 a8 x2 L. i9 B

, \% s! ?" g6 N5 S7 x( A( F
8 R: n+ q3 f$ q( u( s: c! p6 C+ c! C) r2 j4 O" X; ~4 R
步骤三:修改类名5 x4 e9 E; }" P- n
  d6 V: E9 k" B2 S- H: ^3 P2 u+ z

4 Q$ W, Q0 U  ^- p1 _. \" N+ Y. i! ]+ R6 e( D- [1 |: j; _

) Z" P7 O+ o+ @+ v6 o$ V步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口! k5 m0 n( R6 S1 ^/ ~& m7 r

9 F; C8 a. l9 T* N  O4 R2 H( Z
, B7 z3 g$ B8 x/ u# |- `6 @: F4 s2 }
代码如下
5 H$ a7 u% r' o1 q'将这前的ACCESS代码改成一个公用函数
; [* Z, G: A! k'输入:strPutString 字符串变量,需分离数字的字符串
$ \9 p2 v0 {7 |+ ]0 a* e% C7 M9 V7 S'输出: fFindNumber字符串变量,得到的数字字符" r2 g- P% O1 o/ _6 m; \
Public Function fFindNumber(strPutString As String) As String
; `  v. Q+ o- b6 Q5 ~- F/ U   Dim strOut  As String     '输出字符串变量  k4 q1 e6 j2 A: L- d2 ]( C
   Dim I
+ m. M0 ]5 Y5 g8 V  + N5 g- u/ t9 R) m
   '从第一个字符向最后一个字符循环,以提取每个字符2 a- s5 g7 j' }
   For I = 1 To Len(strPutString)
) e2 i% B0 P7 E4 T( Z      '判断是否为0到9字符,是则赋值输出
- ]8 w! z  y! b       If Mid(strPutString, I, 1) Like "[0-9]" Then+ {# A4 G" o! Z2 Q. n* ]7 W' ~; H
         strOut = strOut & Mid(strPutString, I, 1)$ ]: B/ h7 Z% `! c8 m6 P
       End If
- R+ i7 s) q6 A8 k+ {+ \7 v   Next I& d0 ~4 r1 g( [; Z. Y: d. |
   '数字输出4 F+ y- e0 W7 [0 e' x
   fFindNumber = strOut
2 h5 a9 E( N) d6 T, e" FEnd Function
+ l; c4 f  U! F# u. T5 P' O" i! u, P: S2 \# g# {: }) v! E+ J7 |  p
步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。1 b8 D* A3 S: k! g
6 w: c+ o, u; W$ }$ a  Q: M7 J* a7 y
三、        在mdb中调用自定义DLL动态链接库2 C/ X8 O! b* s: m

5 K. x+ Z' N9 I8 ?(一)新建数据库及窗体
6 d! x. D1 }* y0 j新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)! K- R- [- X; A% b
& N! q/ H% I0 l8 }
6 ]$ s1 Z4 p  l0 w. w; o
(二)引用【我的动态库.dll】库
- x2 F( p7 t: M+ Z4 f按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。5 K) L. ~$ `1 _- A# ^) B

1 I2 y9 w* e, p; R+ ^8 l1 c* ^( A+ H: M
. ~& \% @( e) G) |1 Y! e

7 Y# f9 `0 C# z
$ x8 p- R; {  r: L8 f$ a3 z
% K4 {! a5 H) I) J3 K( L$ r+ p  d( k7 O* `- h6 p0 O
( M0 W0 z' g" ?- T# M" r
- [# x! V! P: D& \& [
2 t9 @, M" m4 V7 x; k8 }
(三)在【CmdFindNum】按钮单击事件中加入如下代码。
+ y: o4 Z% x: H6 s; M+ G) aPrivate Sub CmdFindNum_Click()
9 Q# n" V& |" ^$ v- G2 j$ c! T1 @  '申明自定义类
$ O. Y# i5 P7 N% G/ C- x  Dim MyFindNum As 提取数字
6 [4 K* \: O& A. D! h0 p: U  Dim strOut As String
* V' l  u' }2 ?) ]7 o; X" S+ `  5 C! ~% l% y9 T
  '实例化"提取数字类"对象
0 Z5 z/ h* z" d* c( m  Set MyFindNum = New 提取数字
. m8 U1 ~7 m, L7 L( v' ~  '将函数输出结果赋值给自定义字符串变量
& z8 D! [) `. [" b+ S  strOut = MyFindNum.fFindNumber(Text0)3 C: R' G, x) W$ l  s4 B
  9 G# i) e0 u) `; g7 b2 D
  '在消息框中显示8 J) O" |5 A% Y$ t; t: @+ }, }
  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
# c% L1 k( l# j! J! h& y, |End Sub/ G. X; O7 P% q+ g0 n. k
) ^6 }( J  L& Y, h, {( \  S
点击保存后,你就可以运行一下窗体测试你的成果了
5 c. x& s9 L% R5 F3 u* e6 e# K 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。
: N$ `1 O2 j- q. \8 K2 i% h0 ?' a7 t6 Z. h
7 v' D4 K) v! Y0 _) t

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif: ~& O! u) {/ a/ |+ g' K
VB封装DLL实例讲解(一)
0 G; G# [* C" F, _+ `4 I
十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层
Option Explicit
5 t7 }9 U6 {' [Implements SWPublished.SwAddin3 G  ~4 l8 {- k/ c' E
Dim swApp As SldWorks.SldWorks
# m: a+ N2 H! r5 g* n+ U9 J5 g- jDim swModel As SldWorks.ModelDoc2
+ b0 y7 a# T3 l1 ~9 M3 uDim swCookie As Long
! S8 c/ e1 e) L/ P! h4 O  i: lDim swToolbarID As Long$ f) u+ @+ F+ ^; g2 G
, K! J! E: B! j: q5 q
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
8 z2 y( o+ {6 I/ t0 v  F) Y   Set swApp = ThisSw! m: r5 w. ^5 s; k' ~  V3 f
   swCookie = Cookie
& ~( ]0 n4 |+ C   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie/ O, W* G+ A1 {0 S; p/ b
   swApp.AddMenu swDocPART, "螺纹联结标准件库", 59 L+ ?9 h. e- h( s$ ^
   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","
: O3 K! ^. q) z; c3 K9 P   " [- m, t5 u) S. J% b* v! c, T
End Function, e% H4 {! P0 c8 V- U. r
Public Sub Block_MenuCallback()
1 k4 F4 X- C; `* l/ S4 `  Shell App.Path & "\螺纹联结标准件库.exe"
  O, g0 o- ?( T) F  Exit Sub
* s2 w+ F) y- o  y; L' JEnd Sub
: _2 O8 \: J7 j+ n, dPrivate Function SwAppin_DisconnectFromSW() As Boolean& `" |+ b3 N1 \/ Q
        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
( X, q- S8 x3 r! ~3 ~        ; E) k0 t9 Z) p9 w0 }
End Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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