QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
goto3d 说: 版主微信号:caivin811031;还未入三维微信群的小伙伴,速度加
2022-07-04
全站
goto3d 说: 此次SW竞赛获奖名单公布如下,抱歉晚了,版主最近太忙:一等奖:塔山817;二等奖:a9041、飞鱼;三等奖:wx_dfA5IKla、xwj960414、bzlgl、hklecon;请以上各位和版主联系,领取奖金!!!
2022-03-11
查看: 2268|回复: 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% y+ m3 z# f! g

# x0 I7 e& U! nVB封装DLL实例讲解(一), ~* z0 V4 R& \! ~( r8 s0 `) g
9 u: r( Q- g" \) \6 @4 v
2 `0 O0 _# D- ?. ]* O
一、        DLL基本概念
$ f- |+ i" N2 i9 j% v(一)概念
, I/ C* m5 E1 LDLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。8 m. n( F. o9 ]
(二)主要优点:
) {7 ]" X( H% a( g: r1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;
9 h5 l8 ]- h8 D& c; ?( M7 X% _2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;' q* H) K0 |* S$ T' E
3、从ACCESS角度而言,还可以更好的确保核心代码的安全。/ y; J9 q8 z7 v) m7 ~9 }" z

" ?$ y0 x: L1 Q* p$ i5 j: I二、        用VB封装VBA代码,构建自定义的DLL动态链接库
! i; X5 q, b% }" K5 ?(一)ACCESS中实例代码
, i7 O( `: p* |* Y- F下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
, @* j  A9 j) o5 _8 g0 |我将就这个实例演示如何将该实例VBA代码封装成为DLL。
6 f* h  z3 _$ g2 W! Q0 ~, p2 B! `
6 k  f; D4 @7 s: M5 w/ [/ W% ` * `) i# [# E/ Z7 K0 D+ U/ T$ _6 W

) h6 B) s, O/ x8 E3 c 按钮单击事件代码如下:
. M# I" g  Y2 PPrivate Sub CmdFindnumber_Click()
: _* N3 _! f3 Z  Dim strM   As String     '初始字符串
1 o6 {6 F* g7 w0 t  b  Dim strOut  As String     '输出字符串变量
+ w) k  w  w, I3 N/ c$ l  Dim I
% o2 Z  P" Q3 k: b. Q" v  6 [: T3 X7 Y0 `5 v1 }8 B- l
  strM = Me.Text1
& p) N" t% i1 T/ `, `'从第一个字符向最后一个字符循环,以提取每个字符
" `1 a: \7 N/ v  For I = 1 To Len(strM)
, |6 ^6 c' d. \* V      '判断是否为0到9字符,是则赋值输出3 d# K7 ^1 p% r* ?% p; R
      If Mid(strM, I, 1) Like "[0-9]" Then
* x# n- M+ _6 P/ @! u  R; w7 [         strOut = strOut & Mid(strM, I, 1)1 m/ u5 a+ w* H
      End If5 N/ t8 b9 Y3 x) N* K+ G* G9 |( K
  Next I
- k2 ^/ e! V/ B; u2 D  '用MsgBox函数进行输出测试
9 a* [+ f+ B  _7 ^  MsgBox strOut& J2 C+ Y+ N  Z- p; O' Y8 K  H2 M
End Sub/ x. J4 i) V, h, c
    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)3 T8 D9 p  p9 P* ]& v

( w% |4 ~% t8 d* `: w2 x(二)VB封装实例中VBA代码) L0 T" X! w- E  q* u% ^5 h1 |
步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口
# j" W7 Q: u& I; L: w8 L
, y2 A9 J3 _. J# }$ t, A7 Y( |# k, ~, k( W6 \/ F) J9 u0 t9 d9 S

& U: F6 t$ \; o. I
* N8 ~* I! p3 [4 n
) S: ^; |' [% E0 u步骤二:修改工程名,这即生成的DLL库名6 a/ p0 |( N3 |/ C: {

  K$ o, `& O- X+ p
' Y, {. V& u0 l; e3 N
3 s( p( B: P/ Q, A. f4 S
0 {! d0 k/ E0 T2 v( A' V) A+ E) S& w& r: t  e  @$ y6 a
步骤三:修改类名
6 P9 e$ }( m5 g2 C, o4 ^: f- ?: _6 x9 E0 Q9 X" `* m, l

4 h) X/ j8 h! p0 S3 Q8 e0 p) p: ^
3 ~1 H* w: q4 [1 L2 k3 s
* Z" a8 G; `$ h+ a- n1 L+ D步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口
0 [) o# z$ Y% M/ _$ q1 R8 i3 N8 p8 q: S# b& y* u9 m; M* O
! S, R0 n" X4 ]2 G6 b

0 k/ g4 S; l, ]/ I$ |3 ]1 w代码如下, O; _) Z6 P% k; e6 |% w6 V$ Q
'将这前的ACCESS代码改成一个公用函数
% K( A1 C$ O% g  y# R3 A8 E  i'输入:strPutString 字符串变量,需分离数字的字符串, m. K/ Q, R& t. Z3 b* N5 e; E0 v
'输出: fFindNumber字符串变量,得到的数字字符' `; a% U5 A* \% {! N
Public Function fFindNumber(strPutString As String) As String
8 x) y/ j6 l+ O, o' E   Dim strOut  As String     '输出字符串变量
* r1 z+ x! @9 m2 T* Z- h" W   Dim I& ~) B& ~9 @$ m2 z
  " U* L& k( z. E0 w9 w
   '从第一个字符向最后一个字符循环,以提取每个字符% A, E8 p* X: |8 t, p) G7 a
   For I = 1 To Len(strPutString)
  l+ \; k  X3 G/ o5 L  {; w      '判断是否为0到9字符,是则赋值输出" b+ s, o0 C, G. m  c+ X2 r2 B
       If Mid(strPutString, I, 1) Like "[0-9]" Then# o) t. i+ B& S* [
         strOut = strOut & Mid(strPutString, I, 1)
( g. f+ V, C9 [& g       End If
2 S, F2 C; h* F0 H& ]   Next I
1 k0 b8 q5 g7 @! O  q1 f' P+ S: s4 s   '数字输出6 L% s" M% `7 D$ S6 @
   fFindNumber = strOut, }6 O& J+ U  D$ X  O0 r& V
End Function
: {7 s/ M5 U1 N- G2 o# {
* s% H; o- w$ @步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。
" r! S6 }$ s" @8 X6 C% ?8 N4 {+ |8 B! x
三、        在mdb中调用自定义DLL动态链接库
1 k, U) D' E7 B" J4 Z4 q4 r/ |  s- W8 ^3 S; W2 [! f, @* W7 U
(一)新建数据库及窗体6 q" |& G+ o9 U* Z+ x9 v+ z) v: [
新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)- _# x6 d" ]# I1 ~/ i

$ }+ E2 w$ H# m! e4 b+ n, T! Z# v- l. y
(二)引用【我的动态库.dll】库4 |3 h1 m* r- v
按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。% |6 q  f" G" a& \- x

/ C$ g7 K1 U+ O0 Z& Y% S2 x" b! N+ `2 j- {* r
( H* w/ v2 T! X& v0 V$ i5 j
, _+ i' [$ N2 k- o' a6 g3 z

! K) h$ p7 y1 }4 V" f. C. m
/ k' c) }* `0 P4 r
+ O+ y2 \- A+ X( u, W6 t2 N1 Q
2 D/ f5 N0 y& C  a0 p( p& K% g
5 }* f! u# _5 L! `
! B' N/ @/ ?9 `6 a(三)在【CmdFindNum】按钮单击事件中加入如下代码。
" A* ]3 @9 X8 ^- `( z6 r1 rPrivate Sub CmdFindNum_Click()! e; N+ j) x" O, f& F* p
  '申明自定义类
* y! s& F5 F7 Z- B0 K  Dim MyFindNum As 提取数字3 d% F- W5 ?8 m3 I. `0 Q- l
  Dim strOut As String9 U2 Y, S: q0 {8 }' r
  
, A1 G% {  ?* W0 U6 J  '实例化"提取数字类"对象
; P: n5 q' I' H# u8 b6 d! m  Set MyFindNum = New 提取数字3 q/ k) z+ s7 Y- S, {- l1 R. G( L5 P' U
  '将函数输出结果赋值给自定义字符串变量2 g2 U) o4 S1 y/ m& N  n' N
  strOut = MyFindNum.fFindNumber(Text0)
! p: w' \4 S- x5 V7 ^1 g9 ?/ l1 Y    e3 j  K& ], e# W/ |  y+ ?
  '在消息框中显示
* c; p" j. ?' a$ R3 Q& A) B  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
& S' J* d0 [3 E2 IEnd Sub
( |* {6 \$ U; q4 w7 O$ h9 i1 w7 Q7 R  z: n* H# j9 [
点击保存后,你就可以运行一下窗体测试你的成果了. ?8 p. E* Y* L! S1 d9 f( |% X
 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。9 |$ j" @) b3 e& \' U5 m

- v* ^5 P! a+ H$ c4 Z$ o
$ \6 I, C; L  j0 \& ]+ r2 C

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif
4 u9 n4 g9 ~7 f* |1 nVB封装DLL实例讲解(一)
7 v0 Y9 r$ N# J
十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层
Option Explicit
) S8 F1 D  h) YImplements SWPublished.SwAddin
# R# q" J7 {, C/ }* sDim swApp As SldWorks.SldWorks4 C- B+ ?# F" Q) N7 z4 p1 l  v
Dim swModel As SldWorks.ModelDoc27 v) l9 J% J" {+ H+ @
Dim swCookie As Long. V7 V8 G% @, \% H8 @
Dim swToolbarID As Long
2 M( x. S( s5 ?6 N, b9 t5 h6 o0 X$ z0 n
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
2 S* Q  Z2 i* \  N! _: X   Set swApp = ThisSw
  R! @& Q5 L6 f   swCookie = Cookie8 y) d5 E& M# j
   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie7 ~: u! n6 s( z, b5 y
   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5
2 N3 Z4 z6 R8 N+ ], N) f/ X   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","1 o3 K$ \9 S2 X9 |9 x5 ]7 {
   ! }* S" X+ {7 q, p
End Function7 a$ r2 e& D7 t* ]4 Z
Public Sub Block_MenuCallback()
& B" T0 `8 G; i9 s# y/ |7 d  Shell App.Path & "\螺纹联结标准件库.exe"+ T/ V3 R3 S" z! y7 j* `" @4 @
  Exit Sub: i- ^8 n% y0 W' R3 X
End Sub
1 a. n. D4 T2 bPrivate Function SwAppin_DisconnectFromSW() As Boolean7 `; e9 \3 I0 r. x
        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
0 r' ~" {9 R" Q8 j9 y        $ w* Y5 }; z1 m7 s' m! e
End Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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