QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
6天前
查看: 2486|回复: 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" `5 O: |' t$ m& G9 D3 V; G  i
  Z1 K3 r/ n% c& y! H- aVB封装DLL实例讲解(一)& J+ ~5 m0 N; y  q

: l6 n( g% v) D. D5 ]: U2 P5 E" M% d/ V0 @( j; o
一、        DLL基本概念. u0 I% g* Y- ~. t
(一)概念4 }. w7 e7 i! u9 V% P0 x% c% Y, E
DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。
& {" S' d$ o! o/ r(二)主要优点:" d! V$ W+ l6 [+ b% e
1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;+ L+ S/ X* U- v7 O$ a8 O
2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;1 v2 Q. G1 M5 X* e' L
3、从ACCESS角度而言,还可以更好的确保核心代码的安全。  D6 j. V( q" R: Z) y( a

3 P! j& q4 M8 |" f4 w' Y) \0 O二、        用VB封装VBA代码,构建自定义的DLL动态链接库
' J0 h( W3 n1 j8 L(一)ACCESS中实例代码
4 w# p0 F% z& S: }& I下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
: ~# ?) K' o! {! U我将就这个实例演示如何将该实例VBA代码封装成为DLL。$ G5 R. y. B/ f
0 K& T5 [1 `8 J. F2 a1 y. _

4 y0 N+ B1 [" O0 Z1 a
: i3 ^5 s8 \: e. `/ ? 按钮单击事件代码如下:$ y2 v; s+ ?: G1 [
Private Sub CmdFindnumber_Click()4 u% i7 }' v9 q5 D8 c, W
  Dim strM   As String     '初始字符串
0 ]  o. J3 ?- Q+ b+ b' I  Dim strOut  As String     '输出字符串变量, l  L: W0 m4 f4 C
  Dim I1 ^. {0 {& y) N: ^, P" d& q) I
  + j+ z9 G3 {6 f
  strM = Me.Text1
% u/ U: P5 _& P! @) g- i'从第一个字符向最后一个字符循环,以提取每个字符
+ z$ S* f2 p$ ?$ n4 W8 T8 R% |  For I = 1 To Len(strM)* N1 f; N! e0 b- k8 B3 ?
      '判断是否为0到9字符,是则赋值输出
; y7 F, r& [0 U  s      If Mid(strM, I, 1) Like "[0-9]" Then5 ~: N3 g( ~) {* d
         strOut = strOut & Mid(strM, I, 1)  {7 G8 C- M$ [- J
      End If
# B: v2 e$ V" ~6 T+ S" d7 N" Y  Next I
) H4 `7 Y3 Z+ M6 m5 I' f: T9 Q( Q  '用MsgBox函数进行输出测试7 A9 @+ q% I! d1 \/ @! n
  MsgBox strOut5 c- G7 P/ |' s" A/ X! t3 c  W
End Sub
& Q* g+ l" }/ U! u* o9 ]    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)
( Y/ N4 z2 T  V% X1 J- V
* w. B3 ]5 F# C2 F9 {(二)VB封装实例中VBA代码! o6 E; J3 c! ]8 n" s: S' B
步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口& j0 R* p5 U; f( \6 F# C
% W( U; o* X5 x" y2 d
9 E; Q, m: K1 g+ @) H- L

, S0 `5 o& V* E( ~. P- V1 x! m. q3 M
1 c/ J& J6 T9 |& V4 r& e9 s. V8 V. L/ t
步骤二:修改工程名,这即生成的DLL库名' e9 f0 N( D+ m6 h* E! _

5 l  b1 k" Q+ I0 p7 u% V! @" Y/ l- V6 N5 e8 d

  d# r7 i! J- I5 k6 C
: }$ F" `: m' ^  i  A- ~  `, h. I* r0 _9 D3 V- U
步骤三:修改类名
9 e$ i% q+ |* s1 I' j2 V3 \0 V& \1 I( k2 N
: _& F% g# i8 i, s
* O. X! f6 F( J  h0 t

$ ?, J# P4 y. d8 q步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口: w- n4 k( K. M4 c3 M2 m
- b6 S5 \0 |$ c
& \, w# c' C* J. l0 I/ ]
+ Y$ e. v5 _( p& n
代码如下7 f& n6 |5 \  H& a( _9 m+ W" Q) e
'将这前的ACCESS代码改成一个公用函数6 u8 y% `: N/ {1 x" h
'输入:strPutString 字符串变量,需分离数字的字符串
2 P1 c$ C4 `: J3 m'输出: fFindNumber字符串变量,得到的数字字符( N" p7 I* c  k% T  u8 L
Public Function fFindNumber(strPutString As String) As String
! d' Y8 A: F3 `. V' O" Y   Dim strOut  As String     '输出字符串变量
) H- S, _) a: R% y6 u   Dim I
9 q/ G, o9 k9 G$ X5 K! K- }  
. Z' r! _2 m5 K! j: s: g. O  ~9 \   '从第一个字符向最后一个字符循环,以提取每个字符
- E' J) Y% S$ k2 k* |% |   For I = 1 To Len(strPutString)
: B0 I& y3 e* M2 j& s      '判断是否为0到9字符,是则赋值输出% s) _6 _& J) ]( E2 O
       If Mid(strPutString, I, 1) Like "[0-9]" Then
& o2 g+ f" M8 o3 x, P# D         strOut = strOut & Mid(strPutString, I, 1)
7 W; `5 Z3 b9 c$ M       End If( ~' c+ A, W$ ~) Y
   Next I
/ S. o0 n7 K. V# P* o5 N   '数字输出
# E6 H9 x; F; N. v( B. x   fFindNumber = strOut; {2 m% I* E! s8 Q4 K! {6 C
End Function
2 n, Y! p6 C" V7 q: t+ g" A8 r/ B; z& {* o; P0 B1 j
步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。' D2 L) q7 ~7 H& M, h" [
/ ~& O+ L' ~3 [, t: c( v; G
三、        在mdb中调用自定义DLL动态链接库2 W- j( ?  h, I2 e) [
- o' V. D: A& r. O, }, C* j
(一)新建数据库及窗体8 J) I9 r+ G% i. D% i4 ~3 _) N
新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)" S/ q# s  S0 E. m" c
! n4 P' l9 ]- V: u1 ]* x( I

0 {0 j5 ?, y7 U8 A1 _' h/ K$ f(二)引用【我的动态库.dll】库+ N! I# K0 g  P
按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。
6 b3 ^. y# ]  v% {9 Y. c# g
+ r9 [( e& F# f* l
3 L0 Z4 Y) m7 B* ~  |8 ~+ p
7 R; V# r: M! h% K( f7 d5 S0 L- n! m9 N0 x. z, p6 @) l
7 w5 W0 C. P8 b

, p. e# u2 ~4 n& E" ~' q, _- k/ c. d* }) U) D

2 z0 V8 b1 t9 }2 ^8 m4 Q# j. V: o- i  K) J
/ q3 c& U( U" c9 o1 p% m
(三)在【CmdFindNum】按钮单击事件中加入如下代码。+ x9 ]* k! g! A  R) n
Private Sub CmdFindNum_Click()
9 g" g# {7 ]% N3 u& }5 R  '申明自定义类/ J$ o. c4 O" J
  Dim MyFindNum As 提取数字% s- X  }4 I7 K) A$ j3 C
  Dim strOut As String% Y7 j% `7 {, c! Q
  5 h/ L* W- H# Z5 o: f
  '实例化"提取数字类"对象
4 U9 U! d0 o" U8 v4 y7 i  Set MyFindNum = New 提取数字
1 A2 v& ^- Q" \- {  '将函数输出结果赋值给自定义字符串变量# U7 N- B7 A0 x% ~
  strOut = MyFindNum.fFindNumber(Text0)
; b0 b4 Q1 [# L4 @  
/ z# n" g, w8 ~! D6 j+ p  '在消息框中显示
  i$ q8 X( j& w8 C8 Q  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"5 c' `; T7 H! ^0 ]
End Sub2 K2 J& B4 z- ~( Z, l9 u

( z8 Y/ ]1 k* y( J' [  Z* S( |点击保存后,你就可以运行一下窗体测试你的成果了
9 b7 ?, V! D( I( X 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。* ]5 Q  |) v# |' |! b( }9 B
' f( e( ~  z$ F& |
, o$ n+ Q6 z# _' G! E7 i

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层 来自: 中国浙江杭州
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif$ r- M* W5 ~' ?3 K% j7 _
VB封装DLL实例讲解(一)

7 ?; [* I5 a6 E$ T* l) v( L十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层 来自: 中国广东佛山
Option Explicit
  u0 F# ]: R2 M7 P3 YImplements SWPublished.SwAddin
/ K! q2 V: r" qDim swApp As SldWorks.SldWorks5 L$ X! |4 e  K3 x
Dim swModel As SldWorks.ModelDoc2
7 b5 p) s% ]6 b* P/ ?# C1 WDim swCookie As Long
! `7 S5 \2 D( _, a6 {# lDim swToolbarID As Long9 p# B  l- d7 X1 v
& k/ E8 X$ \' L/ I8 l. V
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
2 f& h2 P  r6 v1 \5 a1 ^   Set swApp = ThisSw
$ J; Y& U0 ~7 {% ]' t: b2 U  t   swCookie = Cookie# ~( E8 {) ]8 f9 a
   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie
. ~/ W/ F+ t  K; o$ @   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5& `1 t# E4 u0 U1 j, f% j
   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","- k, m! i# Z& s) h7 }6 n; v
   
' l" T  z+ F+ j/ W! S& i7 J+ h( FEnd Function4 k$ }/ W; F. R) c# r
Public Sub Block_MenuCallback()
0 U2 F) E* I1 J9 W  Shell App.Path & "\螺纹联结标准件库.exe"
( m$ ~$ k. \! ~) f( e) u  Exit Sub
: H0 ]; K, v  V3 t- k1 W( C4 QEnd Sub
! Z1 k9 v! r6 \. V: I' lPrivate Function SwAppin_DisconnectFromSW() As Boolean
; z! w; Q" N8 f4 A* ~        swApp.removemenu swdocrart, "螺纹联结标准件库", ""/ R. z' |8 n& s9 O6 F8 ?/ m) s, [
        
2 n) }& `6 p3 L2 u; mEnd Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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