QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
goto3d 说: 版主微信号:caivin811031;还未入三维微信群的小伙伴,速度加
2022-07-04
全站
goto3d 说: 此次SW竞赛获奖名单公布如下,抱歉晚了,版主最近太忙:一等奖:塔山817;二等奖:a9041、飞鱼;三等奖:wx_dfA5IKla、xwj960414、bzlgl、hklecon;请以上各位和版主联系,领取奖金!!!
2022-03-11
查看: 2182|回复: 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 编辑 4 m( H" i* l  G3 ~9 W

  T* f9 `; G; eVB封装DLL实例讲解(一)
  o: J' R( G: S! U1 K
% Z  I! u1 c+ F
6 m4 {. {+ ?$ O6 W一、        DLL基本概念  u; a2 }. ^  ~6 R: A) J/ N5 o
(一)概念
8 g! \, u* @6 sDLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。
4 }# ^3 _( M5 M3 K2 b# l5 t$ ?4 A(二)主要优点:5 d3 d2 A/ |. n
1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;1 U. o4 G- K0 ~; V5 F: G9 I: |
2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;
1 I1 Q4 X  v0 F" S8 _, F. u3、从ACCESS角度而言,还可以更好的确保核心代码的安全。% @, z0 z6 U6 H* m& ]5 I, e$ m

7 ^" S5 |" v2 V8 P3 }; d( k( V$ Q8 O9 h二、        用VB封装VBA代码,构建自定义的DLL动态链接库
  u0 _9 j( p. _(一)ACCESS中实例代码4 }" s2 O- l: ?$ Q
下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。8 {+ }% t: n, X  I  @$ v2 [
我将就这个实例演示如何将该实例VBA代码封装成为DLL。4 e3 Y, U' k- Q. i1 M

4 I2 s* O0 A4 s ! U# ~8 O# q: @! Z

7 B( `7 N, R* s6 x 按钮单击事件代码如下:
1 E: b! d7 R. N; |Private Sub CmdFindnumber_Click()* ?* M0 g) A8 g% y5 I- w- P' d
  Dim strM   As String     '初始字符串
* i- g' x6 K* x  o  Dim strOut  As String     '输出字符串变量/ \# y0 s4 t4 @7 R, B. e
  Dim I
( _9 g( l  D* H! @: g3 M& w% v  
) u0 j( V: y0 s, f" h' J8 j  strM = Me.Text1
+ w" U% L+ T8 j- |'从第一个字符向最后一个字符循环,以提取每个字符
2 K, i& \+ U0 A& H0 X# C  For I = 1 To Len(strM)% }$ l9 C) C% h4 v
      '判断是否为0到9字符,是则赋值输出
; g9 S# D& d/ k6 A4 d: Z      If Mid(strM, I, 1) Like "[0-9]" Then
, I6 ?1 G8 l4 N         strOut = strOut & Mid(strM, I, 1)5 G/ b/ a+ f- u' G
      End If( T  _+ ~) V# D  J: o  K. ^) y
  Next I. y  k# Z# o& {( b
  '用MsgBox函数进行输出测试
9 r! p+ L9 K% v$ B5 z% t/ n5 P7 ]  MsgBox strOut
- n8 r" K! e2 A5 {" {+ c6 {End Sub
+ ?1 E0 }+ `* |% `    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)2 o$ o- e7 Z/ c( {
& V6 H1 o# Y% P  ^7 M( U* w
(二)VB封装实例中VBA代码2 G$ |: _, y" M# O) q) E- I4 N! C
步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口7 F* M% K) R) Y1 d2 w' b* O' }- k7 m

4 G6 }5 g/ m0 l3 M" G0 {( l6 W  G% y. m+ R' d1 ^; D8 F
9 U4 L3 T% U: }  i+ n

' P1 o: r- h8 f  w9 {; w( @5 c5 h! n4 i% w* v
步骤二:修改工程名,这即生成的DLL库名$ T5 d: s: {/ n- E) Q

, U' v" i# u" F( b0 |) R) N; m% G9 e# O, @! j
5 v, ^0 c2 h% P! O, q7 k
* z& [6 |& a$ A, ^

$ [# Z' p4 {$ C' I+ Q1 A! w: ~步骤三:修改类名
: y2 B4 N% |3 ~/ Y9 y. t! x) C" F0 u, a% w) Q
7 N  s6 e5 ~% D) q

9 j  `8 I5 S6 Z& {4 j4 P
- ?: z0 K/ V7 v; d! ~! ^, k步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口' a! S* V9 B# K% d$ L

4 r9 |5 `1 N: q7 Q' _4 x0 ?/ w
/ |; x5 M9 U' |2 ~* |/ t
0 g& l" [* z0 d代码如下7 n4 ~7 ?3 u* V% D% R$ ^. Q
'将这前的ACCESS代码改成一个公用函数
" ~& E- f2 p/ o'输入:strPutString 字符串变量,需分离数字的字符串
! @! [3 M& V) x& g6 _'输出: fFindNumber字符串变量,得到的数字字符8 L2 b* }8 v3 O0 K
Public Function fFindNumber(strPutString As String) As String
) |4 x  Y' W. ]$ X8 r# `   Dim strOut  As String     '输出字符串变量) i8 s' b3 c! X2 T
   Dim I, j2 _# O) l% B. C& w6 D, N3 K
  
; A- Y: {" q0 U0 h- K   '从第一个字符向最后一个字符循环,以提取每个字符9 ]; B% R5 S+ |/ A" _
   For I = 1 To Len(strPutString)# s7 \. j/ N4 q1 I
      '判断是否为0到9字符,是则赋值输出
# g8 D" O2 S/ x" a: B5 W/ p: J" R# t       If Mid(strPutString, I, 1) Like "[0-9]" Then6 E% F8 K6 f: ]6 f1 |3 ~4 @! {
         strOut = strOut & Mid(strPutString, I, 1)
) A  p) B5 |1 I. f       End If. q1 P5 S- }4 X3 n, w0 [
   Next I( c' m, j/ q" e, Y; I  F5 z
   '数字输出
. e# b' q. ~! u, T5 ]9 F3 y% r% M   fFindNumber = strOut8 j0 W; ?) ^  h( @7 e* j
End Function  D0 }" y  v% @/ P/ k; T( [

' {' u7 {2 u6 A( C步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。
+ ^- j1 ~# c7 H9 L! R% I
, c8 s2 K5 \: b0 }* F* N3 z三、        在mdb中调用自定义DLL动态链接库
5 R, I: D; X5 {. r  q- f' j  c, S1 e6 a- `+ J9 i
(一)新建数据库及窗体* N  W: x! \$ P! t
新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
: @1 h, }+ [$ C# [& R
! R' W" d8 f0 k% d; R3 C" a) v( D
$ y9 S2 [; U2 `" D9 |(二)引用【我的动态库.dll】库  c" C/ i# f9 |; T* p8 v
按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。
0 U" z+ o' L4 U5 A$ x- O$ p( A& n0 x7 b9 C  d) N

4 }: g8 D" K  H8 S, {0 u1 z" {6 E7 m8 [! a

+ b0 }# v1 K* a) P* W
2 I0 f: D5 k. Y$ W& k& t
: V0 u" L% G* F5 U, X" H
0 t2 x, ]% o8 h# k% V9 }3 e9 d' f% a) ?. f+ C: m/ J9 i
, }+ P0 M6 W: I2 U3 k
$ \% M* p9 G5 F
(三)在【CmdFindNum】按钮单击事件中加入如下代码。# ]+ i5 b6 h1 M4 e5 S  B
Private Sub CmdFindNum_Click()/ T1 m' C& R4 g! i5 y
  '申明自定义类
7 D$ U. ~( u! q8 ^  Dim MyFindNum As 提取数字0 G+ n" q2 a* a) P" G8 d
  Dim strOut As String7 K- ^8 K" v  M1 @( Q+ N
  
2 ?  _, q: z$ M. B2 V. B, f  '实例化"提取数字类"对象& X. ]$ [0 B- [, f) b5 N
  Set MyFindNum = New 提取数字
: a5 |- \0 [% s7 y3 W# D  '将函数输出结果赋值给自定义字符串变量% X8 Y" z% S8 t' u. g% V; A2 Q
  strOut = MyFindNum.fFindNumber(Text0)/ g5 ?7 C/ [" Z; T0 F8 S( @; H0 E
  
2 V7 R, ?! B4 M  '在消息框中显示
/ F: B; [( C, j7 R9 x  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"  _% R+ \- `, V( A" _
End Sub$ V! D7 P/ \. q
+ P4 n" R8 K5 w( B) n+ l/ \
点击保存后,你就可以运行一下窗体测试你的成果了: i2 M" I) y1 K+ ~' S! P) J" q# U
 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。
. X# U2 r8 I* L; ]& m, e9 J( y) V4 l( Q9 O! W

! P* b$ a4 G% s1 |" i( e6 ^7 V

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif
+ a8 D1 j& u+ C: N4 D- P/ F: ]VB封装DLL实例讲解(一)

8 w- J( S5 C  m3 n十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层
Option Explicit+ p' K2 X0 Y- G4 I
Implements SWPublished.SwAddin( I8 ?3 u6 p5 N  W1 J
Dim swApp As SldWorks.SldWorks& [+ s' i. B3 g5 @
Dim swModel As SldWorks.ModelDoc28 C1 a5 T( l: [+ K, h/ J+ k
Dim swCookie As Long( W, j, t0 M. p- l# X* w: |+ ]
Dim swToolbarID As Long7 V4 p3 |; a4 {
+ M8 q- P' G3 w: P; |9 k
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
: G! i7 I8 `; @, J0 X7 t   Set swApp = ThisSw! t8 m. b$ W: x/ v" W5 E: t5 {2 G
   swCookie = Cookie7 l4 @- v( I: \' G- P
   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie1 M3 p4 i& V5 i* P% o5 I3 F5 m
   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5
8 L; `% O$ J- I+ r  Z( z. Z   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","
0 d, x. e. k+ K  S! a! m3 I7 T   
& u# U# I1 ^  U# l( ZEnd Function
0 {! y# V9 I7 V* b3 M, _( C/ aPublic Sub Block_MenuCallback()+ P9 {3 z$ x: Y5 t% |
  Shell App.Path & "\螺纹联结标准件库.exe"0 n3 j- c' E- W6 v$ I. q7 e( u5 O
  Exit Sub
) D. |1 Z8 a- G8 p( B2 r+ JEnd Sub
! I; g( t. m4 K' |9 x! C+ L* z( Y6 hPrivate Function SwAppin_DisconnectFromSW() As Boolean
& Q% X0 ^  ^! m' E2 N        swApp.removemenu swdocrart, "螺纹联结标准件库", ""/ p* j4 u6 s  q
        & w& ]6 |' `' l  o7 T5 `  L( Z
End Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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