QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2507|回复: 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 编辑
/ r" G. G( Z# E. ~! S- R% U5 P: @. j  r& w
VB封装DLL实例讲解(一): E/ F9 g# r* @) ?

8 ~& v- \. Z( f# J, Q4 _6 |0 }$ V# x
一、        DLL基本概念( L, N  L6 J- T$ U8 W4 H
(一)概念
+ Q# i5 U+ K# ]( WDLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。
3 g% g. Q% l& g, S(二)主要优点:% b+ O9 \" n- i- Z
1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;
4 {* a- r4 [6 J5 `0 y2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;
1 L8 D5 g! \' N7 W8 c, h& F3、从ACCESS角度而言,还可以更好的确保核心代码的安全。
6 c% o: {, r* h9 O1 D: M
" N& D% q) o8 \) o* X  Q* C二、        用VB封装VBA代码,构建自定义的DLL动态链接库. \" W+ i3 C4 `1 H$ X. }& t  B6 r
(一)ACCESS中实例代码. m. Q, Z  |2 R' w" u
下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。  Z* `+ r( b8 n8 m6 {. o
我将就这个实例演示如何将该实例VBA代码封装成为DLL。
9 k1 N) d% E. {: C( y' {- A
3 W0 i/ }/ z% }5 [% f
& p" V9 H% A) f7 O# q
+ }8 ^, W: f5 @ 按钮单击事件代码如下:
" I& J( H. p0 q* {Private Sub CmdFindnumber_Click()6 _0 l' }* L+ B! ?" R' l- B6 m
  Dim strM   As String     '初始字符串! ?6 G! e# @0 B
  Dim strOut  As String     '输出字符串变量- J2 y! f9 O% `! a5 H
  Dim I7 \  n* w; o+ P, y# ~
  
5 \3 T) a0 v% Z, i  [! e1 L  strM = Me.Text1: e4 M! T# |* Z& V& X! l( k
'从第一个字符向最后一个字符循环,以提取每个字符
# I9 b/ e8 `2 D. V/ ]! U8 ~  For I = 1 To Len(strM)9 V: `4 k6 d# ]  e0 l- e) h
      '判断是否为0到9字符,是则赋值输出2 _, P5 u& F) `: H& n0 M$ [
      If Mid(strM, I, 1) Like "[0-9]" Then6 B. l- U$ @. F* Q8 P
         strOut = strOut & Mid(strM, I, 1)! w5 w+ b6 Z1 \. J1 T, c1 S
      End If
7 ^( \  Q- w4 j+ q, W  Next I- Q0 L% _; Y2 `% h6 x6 T
  '用MsgBox函数进行输出测试+ \0 e) x* u+ i) A
  MsgBox strOut- F7 i( t: w" L0 T
End Sub- f* L' W  E% Z
    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)
( w3 v+ q# b0 d1 |  N0 N
  [) z/ T$ ]# b& P; `% c1 b(二)VB封装实例中VBA代码
* D7 E* Y  m, }  u# M8 k步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口0 ]! S) v4 `  N& S% f( B+ ^2 v
- x& U. n& Z" g6 y! D
' r! H1 v* x7 E4 B& g3 q. `( J
) D& S3 R+ W  T6 t6 a0 [, s- J

3 b! B: W0 b  N) m5 H! C4 x9 G. r3 w5 M# Z' o
步骤二:修改工程名,这即生成的DLL库名
. D' u0 K" [3 @  |  P0 I  H% }$ H6 l8 n! x- H% h" ~/ t
2 V0 t; k) c, B/ _4 z2 R" d+ D2 H

+ O, _5 z3 r% U! i4 P7 T% h8 |; O/ B1 f2 c1 Y( Y

* d  h8 i2 R- l2 ?# j9 D/ C步骤三:修改类名2 ?6 w, x1 d2 O6 C7 o
# `" Q: @4 P' `' ^# z! i+ ^2 w5 C$ o9 X

  @7 ~/ N$ q* w  @  _2 g; e% m1 c  D& A$ ]
. n  u: o, L0 G8 ]
步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口
8 c5 r. C2 Y/ ~& N9 |
# n; {$ e' N6 g4 `6 X& s& n7 Q, X, g! L8 m7 A3 l7 y
+ e; q1 ], I7 p, V0 j
代码如下( q! I0 x; {7 ?4 r7 L
'将这前的ACCESS代码改成一个公用函数& @- p& n" T1 N% R
'输入:strPutString 字符串变量,需分离数字的字符串
7 h/ u  C2 e. M'输出: fFindNumber字符串变量,得到的数字字符: s& `& [, t, s
Public Function fFindNumber(strPutString As String) As String- p$ L* P; w( b5 b6 N
   Dim strOut  As String     '输出字符串变量
, {- t' X8 j8 r* V   Dim I
6 h" |3 ~4 Y6 W" y  
& S7 t4 n& `9 P; E- V# u# D   '从第一个字符向最后一个字符循环,以提取每个字符
3 l! ]% [& ^7 }   For I = 1 To Len(strPutString)
3 a9 ^$ I9 S/ D, x1 H  E& E% s      '判断是否为0到9字符,是则赋值输出: f+ W3 i5 ?$ C5 z. Y
       If Mid(strPutString, I, 1) Like "[0-9]" Then6 `1 A0 o: h. I' o
         strOut = strOut & Mid(strPutString, I, 1)
' R; Z& |, t7 F8 v: J( T- l( L) V       End If
+ f) j& {, ]# j% U7 v* A   Next I
  B' P  N- B: w' }   '数字输出
1 `( W, @8 G, B" m$ r7 {* I4 `% t( L  _   fFindNumber = strOut/ C- |4 ^1 ~* Q: b
End Function
1 G7 X( Z5 G1 ~8 z+ y9 S
4 m7 R1 I* x- g" c步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。
$ D# F4 s8 e' p! i7 N  x) y5 u  Z5 j1 f' o0 B7 {5 l) N8 {  w) v
三、        在mdb中调用自定义DLL动态链接库  G, [, F1 l2 l& Y

* o( x. v9 _- {, @' [(一)新建数据库及窗体
3 L" D7 j2 x" }. \0 f7 H新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
/ {/ W& g1 z# c( V1 L# Y9 M, L4 i. m2 z) [& x" C9 D

5 x0 h/ o8 B  L(二)引用【我的动态库.dll】库
! G9 R% c. L" l按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。
' O0 O! a1 g% S2 X
+ ]" M* ]. l& V* v
9 x1 g! B; u1 }; W& q$ G3 U
( x9 s. z. i* p& c: X
9 B6 ^6 b; k( M  a5 ~! d1 Q7 q% ^0 }0 U' T" W2 d( {
" ~( |$ d1 I8 A: r# A
8 I: T" `# l' x5 U0 m# A4 L

: a& \, n" X1 F6 E% d$ I% K) W$ H& \% f. d
$ J& W9 j: C5 D* I
(三)在【CmdFindNum】按钮单击事件中加入如下代码。. A& H' b. q7 ]& g. g! B
Private Sub CmdFindNum_Click()1 `5 N' ~% ?+ U2 P
  '申明自定义类
! _  G' B  q1 N6 J+ O7 s( @  Dim MyFindNum As 提取数字  ^$ ~- ]" C! W
  Dim strOut As String/ L* S' U* s8 k; b$ ^1 J
  
4 q% T' |; C; E& M  '实例化"提取数字类"对象- z5 t* y. D8 e4 A0 Q
  Set MyFindNum = New 提取数字
$ k2 B" V6 B2 l6 T/ k" Y. k. G  '将函数输出结果赋值给自定义字符串变量: _7 C# a1 n. @2 x3 K
  strOut = MyFindNum.fFindNumber(Text0)% D) p' R6 \7 x7 Q
  / f; I: }" H& Z+ b6 e! C1 k. a2 F
  '在消息框中显示
7 {) T6 U- ~7 O5 m  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:". ^6 [- Z) P* u
End Sub' \* ]- `3 D  B$ j/ \. a
) x, [8 D! ?0 [6 t3 P3 v: ~
点击保存后,你就可以运行一下窗体测试你的成果了
. n' ?+ v  N0 Y. @0 m0 V) T. ` 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。; ~# V5 d1 s9 v  g* @3 [
2 V* M. t' f0 C) r( X) L  ?

* \$ n9 t5 q& \

VB封装DLL实例.rar

139.48 KB, 下载次数: 5

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif
% c" S8 @( {/ f/ \# d  ZVB封装DLL实例讲解(一)

7 ^& W: j6 u1 j. C9 Y十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit
, h" d2 D% A5 n0 _Implements SWPublished.SwAddin
% Q/ `/ S8 d8 Q8 u9 oDim swApp As SldWorks.SldWorks
* W5 c% |, O  v. tDim swModel As SldWorks.ModelDoc2
( |1 N* Z' H  D8 V) G" l0 `: bDim swCookie As Long
+ q- T8 q! x3 ^( |4 T. z( XDim swToolbarID As Long
  B2 f" E+ }) Y4 i
4 D! c; j2 u  z; {Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean9 X8 A1 c# S+ R3 @/ Y
   Set swApp = ThisSw: L) ~- g% _+ ~* L+ e
   swCookie = Cookie
* r4 P: F/ G0 I0 A5 a   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie
5 W5 B. P( i' t8 p   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5: f- G: G  s9 G; X' Q
   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","
- X( Y% n7 f5 |6 J0 {& |9 f   $ J0 p; {% l( Y! {7 E4 Q2 A; @
End Function8 I9 o7 z4 h& P3 A/ T
Public Sub Block_MenuCallback()( e- O2 L' P& y7 a4 H
  Shell App.Path & "\螺纹联结标准件库.exe"0 P+ ]8 l- ^- ?
  Exit Sub7 T: b, d+ z, o3 u' S
End Sub6 k) R7 N* \; P5 m9 c9 i/ B" T6 d
Private Function SwAppin_DisconnectFromSW() As Boolean, R, a. ~1 C5 f( f
        swApp.removemenu swdocrart, "螺纹联结标准件库", ""# i, e: W8 A' S' H. [% Y/ I* h7 D
        
' b9 R/ ~% u4 C+ {3 E4 i' ]: X4 zEnd Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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