QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
goto3d 说: 此次SW竞赛获奖名单公布如下,抱歉晚了,版主最近太忙:一等奖:塔山817;二等奖:a9041、飞鱼;三等奖:wx_dfA5IKla、xwj960414、bzlgl、hklecon;请以上各位和版主联系,领取奖金!!!
2022-03-11
全站
goto3d 说: 在线网校新上线表哥同事(Mastercam2022)+虞为民版大(inventor2022)的最新课程,来围观吧!
2021-06-26
查看: 2286|回复: 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 编辑
& c: g4 Q: k+ ^5 f& R% Z- V- l5 F' r; _
VB封装DLL实例讲解(一)
1 V3 {  V  Y5 `, W6 w# }/ I$ a
' [6 X; o- {5 j: p& n3 ~9 G, M9 r+ @4 c# A1 a) O! M5 x& w
一、        DLL基本概念
6 Z6 L1 [) z' j) |4 h(一)概念
$ `% i3 a* s/ j! }DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。
  m" |: S% o# l(二)主要优点:
! \* j1 [+ N) _6 M# H1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;
+ W9 Y: o% o" p3 i0 r2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;
  j; E, }7 Q8 O" ?3、从ACCESS角度而言,还可以更好的确保核心代码的安全。; g1 J6 q8 z" t: w! w. D
2 k# X# V2 D7 U  I
二、        用VB封装VBA代码,构建自定义的DLL动态链接库
" u) ~( Q. x+ S7 C; P) d(一)ACCESS中实例代码
* D4 C4 z! a0 n2 B& a$ w- o下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。- ^! g3 n4 ?  D/ [
我将就这个实例演示如何将该实例VBA代码封装成为DLL。
' t9 l/ L: ^, @7 L" c, g& i1 O0 [ " \) F6 N. v6 N/ e  X0 k3 M, _
( \5 V  R% d" Q4 H/ `. I

+ R, y8 r3 ~6 ?0 d7 ~  A* n! | 按钮单击事件代码如下:* {  t6 p2 Y  T; e/ e1 m* r6 x, k
Private Sub CmdFindnumber_Click()3 v( F) E: Y" M9 s7 _2 I, i9 K
  Dim strM   As String     '初始字符串
0 w! q7 N1 ^. S' d' Y  Dim strOut  As String     '输出字符串变量
1 h  ]4 g. w0 q  Dim I
' X$ f0 t+ v" t' w+ s6 k9 S  ( x% O, r) t7 W/ S+ t; S
  strM = Me.Text1
; s% o- T+ p1 V- a# N; m'从第一个字符向最后一个字符循环,以提取每个字符9 [, X$ [' B  M  n
  For I = 1 To Len(strM)
$ f/ v9 g4 }  J" ^4 Y& k      '判断是否为0到9字符,是则赋值输出4 t. v/ I2 U& V6 }
      If Mid(strM, I, 1) Like "[0-9]" Then
% N4 G, [! n& O- y$ I! q2 b% u         strOut = strOut & Mid(strM, I, 1)1 f5 J# V. p; k0 O
      End If. t8 {. L8 ?! K! }/ n
  Next I
; T$ L3 o' P' Z( j5 Z  '用MsgBox函数进行输出测试
. U4 _, f$ c; k8 c  MsgBox strOut6 C' B7 s; Q$ ]( d
End Sub
% T# m" ^  T& k; }6 L    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)6 I# G% i! `6 H. v) S0 M6 y) ?3 _4 {

( c9 j8 M4 i3 |: L5 P  R9 Q(二)VB封装实例中VBA代码
( E5 a" B$ d, d& r0 B7 g步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口
) d6 q/ P8 T) _
; ~$ P- a& p. U5 g! s- H5 c: [! n/ c* R! Q* ^, |# W0 w

% y" L* _' ?8 ^( b% P8 ?5 I6 f9 k/ y$ b- `) }5 @

$ q5 O1 Y; L3 S步骤二:修改工程名,这即生成的DLL库名
) d! w5 e3 G" q" d  J
0 [/ ~7 k+ T# x2 ?5 G5 k7 p- W$ _0 c- x) L# [& a8 ^/ \; u% @" X
2 b1 R1 @' `: V1 ~& E
  s5 i& r* @3 u- I
& T: p2 }' I+ N9 J7 _
步骤三:修改类名" O; a  \- }' ~( o  J

, [# @3 B5 J: a# D9 S( [2 b0 \" K6 \1 I  w1 k! ~

$ Q4 ^0 ^1 P2 R: D( W8 r9 o+ O! z5 ]6 z0 L
步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口
: ?/ t: |4 k; i0 p* c
1 H, ^9 \4 t% Z. |: c9 Z) k, `
( e. s( d' P2 E' N
$ r, m) s/ `3 H- V9 K( Q9 I& n) w代码如下2 ?+ _& |9 \" i( ?' e+ ]9 u
'将这前的ACCESS代码改成一个公用函数
6 [' z( r3 g/ h* D  v+ M2 g! Q- M5 `; k'输入:strPutString 字符串变量,需分离数字的字符串& z! f2 U; |( n$ n, f5 i$ a1 ]0 p
'输出: fFindNumber字符串变量,得到的数字字符
' b4 A/ {0 a8 l8 |  cPublic Function fFindNumber(strPutString As String) As String' L8 O+ y6 V' L3 H- b0 z7 c1 j" o
   Dim strOut  As String     '输出字符串变量
1 Y% E9 w+ O3 Z& M4 b; H  m5 z- {   Dim I
2 c* r0 m: \. q" d# F0 ?& L+ x- T  ! \  b' k$ b- E* z9 L0 Q9 s* i
   '从第一个字符向最后一个字符循环,以提取每个字符. {* x7 b6 y6 W# x
   For I = 1 To Len(strPutString)
& [" ~: }) W( y$ m- u0 E8 y4 l3 S6 }) t      '判断是否为0到9字符,是则赋值输出
1 B+ i9 W$ _% k. R; V5 N( O4 ~% S       If Mid(strPutString, I, 1) Like "[0-9]" Then
9 }2 s; \, ^5 m& n& z: d         strOut = strOut & Mid(strPutString, I, 1)3 n4 c4 u4 d9 p# t1 f4 }
       End If6 d6 R& e$ T" w6 l! w! y) [2 o
   Next I. Z6 F. r. t& |0 t6 K
   '数字输出& S' L# O4 |, }* i0 h2 L. I
   fFindNumber = strOut
; l0 ?1 q+ j. M# P3 I' C+ ZEnd Function8 m4 ~* J3 g) {4 ?3 V
3 R, u; j) V$ d
步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。) ^; `8 I  Z9 ^
, l: y6 w5 w: [1 e/ u  O3 y. Z
三、        在mdb中调用自定义DLL动态链接库) h% A9 k) V3 @3 `% k
" P0 Z& m/ m2 }0 U4 W: m: l: |
(一)新建数据库及窗体1 p5 f9 U/ Q8 `1 m: t
新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
/ T4 o1 F5 \- k+ O* Q
* i9 R. L2 _: v6 R# l6 P& t) z
/ [% b1 u) p" I4 i0 `(二)引用【我的动态库.dll】库: D; ?( K8 U1 u! g& P
按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。
: D7 y& k! a9 O# d$ J, t6 [' d3 [  ]. w

' [5 K1 J0 e  X- z- W  G  }# a

, r$ ]. a$ a( h% W
# t/ a2 p3 P3 e: W+ Z7 |0 n# a* {& ~  Q. m& ]9 I

- m. i4 V' P5 f: O; m
2 @3 c7 O. |) A8 `% G6 ^3 q" X6 W
, m4 o, j. H' U$ f/ n1 {
$ O, F2 n6 J1 ]5 v0 p* |4 F5 Q(三)在【CmdFindNum】按钮单击事件中加入如下代码。
# j+ \, ]% J+ }7 X. ]( g% D+ vPrivate Sub CmdFindNum_Click(), `3 A2 h, g/ k2 r/ j; `
  '申明自定义类
  f7 V# \6 N9 d" y2 j3 [  Dim MyFindNum As 提取数字
" D4 _( n; Y% D5 \  Dim strOut As String
1 `' Z6 x' C+ S9 T3 C  X# g3 G  
+ K1 U6 K4 @- N- A/ S( H  '实例化"提取数字类"对象9 X  e7 ?) X1 Y$ A9 e
  Set MyFindNum = New 提取数字& n9 v; \, \9 m
  '将函数输出结果赋值给自定义字符串变量
, Q7 ]& ^- i4 {: q/ x  strOut = MyFindNum.fFindNumber(Text0)
* n- a. I9 ]# H# s  
! r; S* Y3 _1 `; x7 B  '在消息框中显示
' g$ h% {' q3 u1 o3 S, ~' u  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"# w( ~! e, t) E: q1 n0 _
End Sub; z* H" a: ^  @! s9 |

7 @( k3 M4 s. v) g8 u" R' q点击保存后,你就可以运行一下窗体测试你的成果了. a4 K  n5 F8 z  n4 X2 v' p
 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。! t+ u# @; d1 P5 g5 c
. @, B/ e4 t: x
/ S" I+ n6 h' c0 s4 Z3 F

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif; S5 {2 V" ?+ |6 l2 |+ z! x
VB封装DLL实例讲解(一)

7 r2 u* c- N4 H3 i  e4 }十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层
Option Explicit6 C8 O. C; B) l$ T1 f" c) r
Implements SWPublished.SwAddin1 f3 N6 W2 N5 l+ n
Dim swApp As SldWorks.SldWorks0 ~5 d9 u+ ]  A6 Q
Dim swModel As SldWorks.ModelDoc2& c6 i6 ?( A8 t5 N
Dim swCookie As Long, }% v) |$ A0 n) X, D1 L" [
Dim swToolbarID As Long8 s7 B+ @; r" O: A* y
# [5 O( }/ Z$ u" S- C
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean9 m3 g& k5 D6 P# M/ l: [
   Set swApp = ThisSw
7 O+ m( ]8 R: g, U! U& R   swCookie = Cookie( E5 a/ e2 P0 _1 P
   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie
& j: _+ d2 Q! Z" Z   swApp.AddMenu swDocPART, "螺纹联结标准件库", 50 Q7 \2 E, e2 S$ V) n) b3 Q2 Y0 Q
   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","4 N" ~  W6 o1 c) K$ t8 v7 V
   
9 L7 ?9 @/ k' j& i: ?; S) [End Function' Q. f$ u" O$ z4 N9 a
Public Sub Block_MenuCallback()
& A' t9 |3 {6 b; o  Shell App.Path & "\螺纹联结标准件库.exe"
6 |8 s1 X6 ]' P1 V  Exit Sub
4 _$ X8 R  @, w+ g( p3 qEnd Sub
5 B% u% `& }5 I& BPrivate Function SwAppin_DisconnectFromSW() As Boolean
  }, l' `( ?( E7 z        swApp.removemenu swdocrart, "螺纹联结标准件库", ""' L8 ~& g; j' O' E
        6 H+ F) z3 K8 [* R8 c
End Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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