QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2509|回复: 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 编辑 : m! p3 D) ?! p; ]8 N3 g7 T
5 x0 _+ I$ [  G0 G! m, s3 C
VB封装DLL实例讲解(一)
% a/ L. Y" s5 y5 k
: M9 I+ z: {3 N; J
  g/ Q( s6 G; J6 X一、        DLL基本概念
( h# ]; f+ f4 ?/ z- Y(一)概念
2 J" w6 y1 }, c. L+ ^# g+ uDLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。+ |4 l  e5 a( w5 [( k# J: ?
(二)主要优点:
, j; a* o" H/ l+ X. d; Y6 r1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;
# [9 Y' l1 x+ c- T/ S2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;
+ H! x. N) R7 q% Q, n. s5 z4 |3、从ACCESS角度而言,还可以更好的确保核心代码的安全。9 X" P' B7 Z. V* l. K# G
9 Y+ z3 t- K2 [6 |' V/ G1 [7 A" s; ?
二、        用VB封装VBA代码,构建自定义的DLL动态链接库: X. i- ?/ @7 \4 t9 Q
(一)ACCESS中实例代码
. v2 ]0 u: @9 ]! X- D$ {/ S# w下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
9 x- R& ~& M  s: P我将就这个实例演示如何将该实例VBA代码封装成为DLL。
. D/ j( E  n1 S+ @
. u" F* N$ M$ D1 J8 k, ?% y! G. y
1 r+ `$ Q* I  o% u3 X2 V
4 Y) u  b8 t. { 按钮单击事件代码如下:  V# e$ K$ q/ D: g0 d% H' e! L
Private Sub CmdFindnumber_Click()9 Y% _4 Z+ G( p! m
  Dim strM   As String     '初始字符串" h; q! r3 d9 H! K7 I
  Dim strOut  As String     '输出字符串变量0 ~1 G: |% F! x; L' L; Q: N$ E
  Dim I, w+ w& N7 G; Q' i# w
  ) S$ ]) T+ c9 {  N
  strM = Me.Text1
8 K* Y' K/ _% X* x- ?'从第一个字符向最后一个字符循环,以提取每个字符" o8 E8 ^8 L! {$ k1 Z: I
  For I = 1 To Len(strM)- R/ d9 g! h  L& [5 v( K
      '判断是否为0到9字符,是则赋值输出
) G# v4 n  _2 ~2 y7 z      If Mid(strM, I, 1) Like "[0-9]" Then5 J# ^; W  M3 t$ ^% H
         strOut = strOut & Mid(strM, I, 1)
' d0 g: G( R. C4 }6 X      End If
% z, g7 |" ]6 z- H  Next I5 E  N5 ^: s5 O& r4 T
  '用MsgBox函数进行输出测试
' J' B0 [* e+ a5 @  MsgBox strOut; v1 z# o* c: f( M
End Sub" j1 X% k6 l% e
    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)
- m  W1 S4 s0 m8 o' n! K# _7 s5 S3 r# R1 J6 `
(二)VB封装实例中VBA代码4 x7 H3 B+ Y" b4 p/ \3 \; D
步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口
: g& g; f# `8 j) @2 x" E
( W5 N- E  E) E3 L/ U8 [
6 Q  r( o  R! u) m1 z1 I
$ U. d6 D' Q5 M$ |& ]; M- S; J2 l4 `: d1 k
0 F% [# x) L' s/ N5 G
步骤二:修改工程名,这即生成的DLL库名
# b/ G7 J* c5 ]% A' n+ J3 @# X7 b, F7 W( B' p% N+ E

+ S  K( R8 Z7 J* ?; r% X. Z- e" T, E* E8 H

/ m- Z' g4 L7 a2 J% e  L
& b, s; u; ~0 q& G4 {4 a# o步骤三:修改类名
% w4 Z& ^( U% k: i
' P# t7 M8 V: H( T+ m& j) U6 }$ {+ Z# Q# Q+ d# @2 n+ E- |% A
5 G* Q! ~* b5 X! {+ S! m% f: k, `
4 x* i; S6 b. t. v' R7 {  S
步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口% d+ [/ A' q3 P
! ?3 w1 v( K3 m. T7 r5 ]( u& r: c

$ e; B0 r& o* ~5 ~7 t) T; X( v4 v( K) Z7 Y% @; H; d6 I
代码如下
4 V" Z3 H& Y# {* W* \& D+ U( n+ g'将这前的ACCESS代码改成一个公用函数  R; q  A# C! @' e8 ~/ R
'输入:strPutString 字符串变量,需分离数字的字符串
/ y) W# [& s( R5 \'输出: fFindNumber字符串变量,得到的数字字符/ H0 ?' E( G3 g
Public Function fFindNumber(strPutString As String) As String
7 }; A1 y! F1 X   Dim strOut  As String     '输出字符串变量
/ B7 b& _1 B- c7 @' v1 X9 b   Dim I) d6 _/ J4 q6 y  S* P
  
9 J2 J6 ~# j& W* w4 ~0 f" B4 o1 y   '从第一个字符向最后一个字符循环,以提取每个字符/ ~$ u5 I4 l# W$ Y3 x/ \! |
   For I = 1 To Len(strPutString)
, w. Z3 U- \8 w. [7 K      '判断是否为0到9字符,是则赋值输出
5 R$ ^% Q5 E) ]. m" g       If Mid(strPutString, I, 1) Like "[0-9]" Then
9 ^# s& j7 o" U         strOut = strOut & Mid(strPutString, I, 1)
9 w1 `4 }% j! ~( N       End If
5 s0 e7 Q; G( x: w0 c' ?) o   Next I( d+ V. Y# k6 `" h
   '数字输出
0 r9 n+ B8 \  R# R   fFindNumber = strOut0 y# I& ]7 F; q; r9 b- @
End Function
! I& ?" `& k- D
" i& Z8 l7 I* Z. ?步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。0 a4 _8 A. {. B. f, q# N7 h  f

% p# k8 Q! |& V三、        在mdb中调用自定义DLL动态链接库
  _3 r# \  ?' Q# P- ?. n: X* K5 G, x
(一)新建数据库及窗体7 X' ]/ J3 n+ Q% H: _9 J; l5 }
新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)' v5 M0 K( |2 w5 r& o: T4 F
' Z5 Z! o( B$ v* R9 q
" M# w1 C0 `  ?  @% Q  N
(二)引用【我的动态库.dll】库
/ M, i& C7 |5 l8 |. Z. _4 Z按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。% F- x3 K8 m) n  }
4 W, p8 B( v, ~
$ g) {+ O) [" ?) V

( ?1 P7 \  R" t5 p; i  i0 ]5 e( ]* |. t' v. m. M9 ?# Z
$ T5 ]' o1 I+ L; Z4 o9 V
( h9 J# ]7 C' {" g2 O# {
1 I" \- \7 S$ }- w/ t
) l! m' {& I2 x  I/ d2 u% j
5 _- ?1 x, \# P. v+ r+ A) P
& w2 b. p: L, p0 E
(三)在【CmdFindNum】按钮单击事件中加入如下代码。* |" R7 v) G: R7 n
Private Sub CmdFindNum_Click()  u5 ~% N  o3 E
  '申明自定义类
9 }* Q# [' r! d  Dim MyFindNum As 提取数字
, f# o* A1 v. I  Dim strOut As String0 J, E# u) C: b% R8 G5 R1 g
  " F) O% E6 J, @8 B: t
  '实例化"提取数字类"对象8 }7 k4 U% `' q$ b) _% o
  Set MyFindNum = New 提取数字
6 c/ x# ]* V4 @) v( \  '将函数输出结果赋值给自定义字符串变量" g% W) i7 i, N$ b9 l- n0 a: t2 T$ s
  strOut = MyFindNum.fFindNumber(Text0): S# d* F+ a) D0 \
  1 ^: k, C$ W2 R  @8 e8 f
  '在消息框中显示  y! c) g' N/ y- q8 k
  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
/ l4 x' m/ ]9 O. W# v1 O, a7 h2 xEnd Sub& j; {0 g) D. b# a' Y" A
8 `5 m: e, T. z4 C! ~
点击保存后,你就可以运行一下窗体测试你的成果了' J# c& j/ P" P$ i1 ?
 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。8 e& I% }# t4 ^: g1 |7 z' ]

& n6 m8 j1 Q& r% w" ~
' a5 V" {) w9 J1 C0 }4 B- }- n4 B

VB封装DLL实例.rar

139.48 KB, 下载次数: 5

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif
3 `0 U3 h8 B; E; }) l7 n1 n  T; |VB封装DLL实例讲解(一)

- C8 T0 J) T' L十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit
' K' q4 m; j9 g# ]Implements SWPublished.SwAddin
, F) X7 ^1 h% k; k9 K5 |- U, B: @Dim swApp As SldWorks.SldWorks
% t5 m9 U3 W7 |/ t3 T0 CDim swModel As SldWorks.ModelDoc2
: @5 H2 t2 G% x0 ^Dim swCookie As Long' g( V& S: t6 l: U9 p" u) h
Dim swToolbarID As Long
. D% X' G/ N, `( N. |/ R! E0 e
6 }% t# D) q  W4 e$ B* R. CPrivate Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
4 y5 t% E; o" {6 H- T$ G   Set swApp = ThisSw/ N% b/ ?$ ~3 j4 ^, Z% q& Q
   swCookie = Cookie
; |' ~; s2 }7 C6 Z   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie0 }* z1 {0 D; [
   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5
3 ~5 S' _/ W% t9 G6 {   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","
. O- I2 t0 l& D4 D+ U+ M   6 b) M7 {; S$ P
End Function
. }$ n. p9 T, L( KPublic Sub Block_MenuCallback()3 c& l5 j: A4 b6 b1 d: x
  Shell App.Path & "\螺纹联结标准件库.exe"+ ?  b( @9 n4 Y9 h+ _
  Exit Sub
! `$ v: @( X8 wEnd Sub
) H" U2 ?0 e0 v9 ]+ e! Y4 dPrivate Function SwAppin_DisconnectFromSW() As Boolean# y4 z4 D/ y, I# b( e8 C
        swApp.removemenu swdocrart, "螺纹联结标准件库", ""4 B+ V+ D1 I  ?; [' V
        
. @2 ~$ f- D- {- k1 m( QEnd Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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