QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
goto3d 说: 此次SW竞赛获奖名单公布如下,抱歉晚了,版主最近太忙:一等奖:塔山817;二等奖:a9041、飞鱼;三等奖:wx_dfA5IKla、xwj960414、bzlgl、hklecon;请以上各位和版主联系,领取奖金!!!
2022-03-11
全站
goto3d 说: 在线网校新上线表哥同事(Mastercam2022)+虞为民版大(inventor2022)的最新课程,来围观吧!
2021-06-26
查看: 2287|回复: 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 编辑
, D( z/ l5 K4 k7 o% R+ X8 F; {9 {- G% V2 k
VB封装DLL实例讲解(一)4 k. f3 e- B0 I) n5 |

$ g8 I3 N7 a* F' S: c  D
( U0 v0 m" k/ K! ^5 p/ k一、        DLL基本概念5 z" K9 x( ~+ H
(一)概念8 X; H' W8 Q% ~6 i6 }5 ?
DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。
( c1 b7 _0 Y' E% b( F(二)主要优点:
( j4 Z' H. x$ l: j1 c1 C1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;
9 Z: Y/ M0 R6 p, q4 r2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;: @" B6 i! l4 i* ?  A0 p) S0 t: k
3、从ACCESS角度而言,还可以更好的确保核心代码的安全。
  v5 V2 ?4 }: N8 F$ e/ u9 G& N/ T4 ~1 r, u0 a" R2 t
二、        用VB封装VBA代码,构建自定义的DLL动态链接库. m$ ?& s. |) u4 \* Z3 i
(一)ACCESS中实例代码1 j/ q( d- C2 B. k# K
下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。0 H! ?) `. C9 O9 x# \. ~- r% A% S: X
我将就这个实例演示如何将该实例VBA代码封装成为DLL。% X# @# \% W5 ]1 N, K! C
3 [  O* ]! ~( x' ~: s3 H0 X$ ^
# u+ t% R. G" e1 ~! T# @: j

7 g4 p7 p/ \; H: _  t 按钮单击事件代码如下:
2 [: s2 i# c+ o$ q4 Z. |Private Sub CmdFindnumber_Click()) Z" W# O- w' S/ y9 J6 h* a
  Dim strM   As String     '初始字符串
! \! _+ g1 D7 {# G; b% G  Dim strOut  As String     '输出字符串变量( R, O3 ^0 t% [3 _
  Dim I7 a7 @" ?6 i( l
  
: Z2 U+ Q) k. i: V  strM = Me.Text1# X7 r# }6 |+ W  F
'从第一个字符向最后一个字符循环,以提取每个字符) u) D; }& K1 K* x% \- ^0 @
  For I = 1 To Len(strM): n, L% j0 H+ @! U: E
      '判断是否为0到9字符,是则赋值输出
+ s: z$ d) N$ j' e- z3 g  n8 Y/ ~      If Mid(strM, I, 1) Like "[0-9]" Then; G+ K) M+ \( M' K
         strOut = strOut & Mid(strM, I, 1)
; @9 ?6 \3 u/ N% |& T      End If) B9 @0 n6 K! x" q. y% Q9 C; i
  Next I
  C5 T0 @- A; o& }) R) K; W# F  '用MsgBox函数进行输出测试+ i9 v  s1 D& ^& h
  MsgBox strOut
& j  S2 l, s; b4 x3 EEnd Sub! a! Y3 k3 h- b" N
    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)9 G) ^5 j7 o; X7 f1 z

' p. h5 B4 k6 B  Q: v! ^(二)VB封装实例中VBA代码$ V, H$ X  w& F- W0 e. T9 }
步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口
, y8 s7 O" t5 T! t% y% |( l! `& b6 E" ]) C

( Q; y3 L  H) u; W8 X% J, {7 B1 s
- L9 O  P- _8 m1 w8 j6 a4 F# z6 i0 p/ T" Z, o
0 a) \0 T7 {& P! J& {/ W5 ^
步骤二:修改工程名,这即生成的DLL库名
- M. m/ D. G! a- X% D1 s6 K1 {2 y
- Q- O/ Y, e: v8 d# ]* T( i

7 f+ P. E5 l& g
, p! p  w" k- O( e$ b: b6 p5 h$ e/ b; f2 g" u( I0 c/ F
步骤三:修改类名7 R5 g1 ^/ H+ ]5 |3 U
: T) r& F+ v9 c  \% u

% ]' s( W) l$ l2 k. Z- v# l8 X+ t" F* x  B0 q# Z

/ l7 c; [) A3 v% H, L. J9 l步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口# x6 S- l+ m# T8 U1 E

/ T/ }+ A' \; I7 |# u7 h! K* A" k
/ e: A. {4 K% C. }0 |0 T: |; Y( ^% J# v8 _  K( A5 p: Q5 c) j4 V- `
代码如下! y# E: b# P1 r5 g+ t* c. F
'将这前的ACCESS代码改成一个公用函数! \* }0 f; _. |
'输入:strPutString 字符串变量,需分离数字的字符串
% R' s* F4 E7 ]'输出: fFindNumber字符串变量,得到的数字字符0 o& P/ z  x- A0 b, W5 B
Public Function fFindNumber(strPutString As String) As String: o# e! b- C0 F) V; q' P# N# h0 E
   Dim strOut  As String     '输出字符串变量' {( o7 X) {6 F
   Dim I1 V1 L) p. i, ]# K1 m/ R& K3 I
  * T3 B) V! \5 X" R9 H
   '从第一个字符向最后一个字符循环,以提取每个字符& D, ]5 D- ]+ B, A
   For I = 1 To Len(strPutString)! [: f1 ]2 g1 {3 A+ N* r
      '判断是否为0到9字符,是则赋值输出
8 I! I5 Q2 R3 P* U1 W       If Mid(strPutString, I, 1) Like "[0-9]" Then
0 ?* y% y* e% H2 I         strOut = strOut & Mid(strPutString, I, 1)
  |3 m0 u$ i5 G% ]4 ]       End If2 M8 o% v1 M( m2 V
   Next I7 ~1 \4 f8 x- V7 U! p8 y& S
   '数字输出
  |3 l% y9 n5 O& \( }   fFindNumber = strOut
4 o& f9 X7 F' v" j! w+ ?) Q5 cEnd Function
4 V% C. j: ]5 A, n- c* g
) O) K2 F  k6 |" w* z7 h步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。& A* r) D! p7 P& D
2 i9 ]! A, m$ I" {
三、        在mdb中调用自定义DLL动态链接库1 w% O: p0 Z& r/ ^6 @

. r1 z7 Y' C2 l7 c2 T(一)新建数据库及窗体4 I4 X+ _  X, @' R2 ~! e5 z; |
新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
5 G( u( Z( y6 l+ F" L( {) T- V: v' T
, R7 W$ l" u& z* r3 j  @" S
(二)引用【我的动态库.dll】库
6 L3 Z1 u6 H" J" l8 g! v8 _按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。
4 T' L8 C) x7 b1 S$ v1 E( [7 G  Z, Q6 e# b+ {

. E& A7 ~- k, F  X. ~$ E! @, f, J( R# ]) c1 V' b  X  Q' x
7 V- G0 t* f+ p/ m

* y" @% S2 W9 E  y2 Y) w
7 r( O; X4 c8 b4 ?! I& `1 C6 \( D: ]3 l/ @7 W

5 @+ R# C# f/ |( D) ~
* T" g& m! K& z) Y9 f+ J
( q4 U3 G$ h: f8 N+ d) c, _(三)在【CmdFindNum】按钮单击事件中加入如下代码。
6 l' ^# ]/ i2 A8 e5 l# M' [Private Sub CmdFindNum_Click()% O% a; S. d' @2 w4 s0 j
  '申明自定义类
! k& _* F9 A, R5 c5 v  Dim MyFindNum As 提取数字
7 p/ k, r' M1 h( \. i! v  Dim strOut As String: S" W+ T0 T  y" P
  
# x4 K5 A6 F# o% Q/ F! I: N) s  '实例化"提取数字类"对象$ r, P8 c% Q# c* ^9 j% T; \# K$ A  G
  Set MyFindNum = New 提取数字* N" S. O! W8 B! w1 ^
  '将函数输出结果赋值给自定义字符串变量
1 G5 ^! b6 S$ ]" h  strOut = MyFindNum.fFindNumber(Text0)2 u5 C9 d$ G% E1 u+ F. o% E
  ( z. `/ h2 N9 I" p9 O
  '在消息框中显示
5 N2 U8 T% A/ X! g! L1 }  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
0 H( W8 d# g9 e5 s7 Q, s8 HEnd Sub
& C1 `* a0 X$ |! G1 Y+ G" h& u3 o" L
点击保存后,你就可以运行一下窗体测试你的成果了  i6 s# Q; C3 ^' h3 a
 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。" _0 x2 v+ j8 |6 ^4 _; U2 L' U

, f; s( m3 a6 F5 G, C" Y9 o& s* |% u& m) n8 q; c  k8 n7 P/ H4 z

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif1 f8 [' b. r3 D' Z: G* A
VB封装DLL实例讲解(一)

# e! P/ x/ I, i+ X- E* ~+ P十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层
Option Explicit3 S% h( U: J$ h* a2 [; l
Implements SWPublished.SwAddin6 v; U0 W' Y# @2 i, m$ z
Dim swApp As SldWorks.SldWorks: n) q3 F' Z. ^! t
Dim swModel As SldWorks.ModelDoc2
$ e& T) y; D; f  G! K8 oDim swCookie As Long2 @3 ?  }6 Y% G3 J' {
Dim swToolbarID As Long% z8 V: n6 I3 c' e7 v. j. y
/ {8 q8 p7 t* Z) l7 L# F4 \# G
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean3 c. q8 [4 j9 c& Y
   Set swApp = ThisSw
# q* f2 [. X2 r: X3 [   swCookie = Cookie
% r4 m. }/ L1 N; G& l$ R   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie$ ~2 k, c2 R, s4 E
   swApp.AddMenu swDocPART, "螺纹联结标准件库", 58 \6 L0 R! r$ W8 q+ ]
   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","
2 c; l/ {( T' R   
7 W* g% r; P7 W- E8 G" wEnd Function, s/ i+ c4 S9 `* M7 b* Z5 {" a
Public Sub Block_MenuCallback()
  X8 {* |# f- N$ \, Q/ h4 ]5 ~  Shell App.Path & "\螺纹联结标准件库.exe"0 K) P  S' Z: R% S, X$ l* U) [6 H
  Exit Sub3 r+ g5 ^- U+ g- x$ g: L" `$ z( {
End Sub9 H* S2 W& n( e  X
Private Function SwAppin_DisconnectFromSW() As Boolean
# Z  H( Y0 R3 H3 r        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
+ r6 U2 }: y, g        
6 C: m, D' d5 P: \End Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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