QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
goto3d 说: 版主微信号:caivin811031;还未入三维微信群的小伙伴,速度加
2022-07-04
全站
goto3d 说: 此次SW竞赛获奖名单公布如下,抱歉晚了,版主最近太忙:一等奖:塔山817;二等奖:a9041、飞鱼;三等奖:wx_dfA5IKla、xwj960414、bzlgl、hklecon;请以上各位和版主联系,领取奖金!!!
2022-03-11
查看: 2181|回复: 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 编辑 $ H. G5 S' X2 U3 i4 X- Q) I4 r' V% f
/ p9 L, V$ u) ]! z$ `
VB封装DLL实例讲解(一)
1 ?5 }1 t) c! H2 y  h7 m3 `+ m3 J# p0 _

8 I) d1 ]' i& s' g3 T! n! D一、        DLL基本概念% J" V! R! f  X
(一)概念: E1 e2 y$ x) {5 Y. d/ d9 D! e# ?% `
DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。- X( x* j6 r* v1 T$ g: @' v- G. H
(二)主要优点:" U$ A# y# p1 E# Y: [  u+ Y
1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;3 }5 B- O# G6 z/ E3 r. s4 z# r9 C
2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;
. e5 R3 z8 l2 G2 e6 _3、从ACCESS角度而言,还可以更好的确保核心代码的安全。( ~+ @8 s. u1 \$ z; c7 Z

0 M3 K) d) O( s9 T# `4 z2 a( z二、        用VB封装VBA代码,构建自定义的DLL动态链接库6 A% Q! \, X. `! @" y3 x% F' P: p- s
(一)ACCESS中实例代码" F; {, E4 n6 z' l) o1 t
下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
( J& N: W3 a: g3 J4 o我将就这个实例演示如何将该实例VBA代码封装成为DLL。
9 Y* u' _) }5 S/ d- R7 I" N, N0 l " b0 O  T3 h! B/ z
5 ]/ d3 ^9 e; {6 Q6 u

' x, y5 }4 v0 B6 j7 w* f 按钮单击事件代码如下:
! Z" E! l% R7 \1 hPrivate Sub CmdFindnumber_Click()! c- h6 f+ c, ~7 J3 `1 A
  Dim strM   As String     '初始字符串+ E+ }1 {' D: _& `! e0 F8 C
  Dim strOut  As String     '输出字符串变量
7 Z2 Y7 D8 D* h+ b  Dim I
! K$ |" E: ~8 z9 j' }  
1 |9 g# L  a- |% p5 \, i) o& X" \  strM = Me.Text1
1 b; E% L) c2 W) B1 a'从第一个字符向最后一个字符循环,以提取每个字符
% s$ O; [% x8 J* }  For I = 1 To Len(strM): [2 r9 I( T  Y, I8 Q; g
      '判断是否为0到9字符,是则赋值输出. ]/ n% l- F8 G# n6 X/ z
      If Mid(strM, I, 1) Like "[0-9]" Then. S. u) T7 I8 a. M, f) s
         strOut = strOut & Mid(strM, I, 1)# v9 U) Z" @- o+ H0 i( P# {* w( r
      End If
8 h4 }. h+ `6 f( N4 ^9 o  Next I
, b3 g+ B. s1 X. A2 n  '用MsgBox函数进行输出测试- m. S7 V0 @6 l. b: y- s
  MsgBox strOut2 y7 D$ h, U4 |0 U9 `' x4 L8 a8 w7 y
End Sub  p+ Z% M$ N5 [  d
    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)$ o* \2 [/ f: d/ J' V: [
) n8 |' a  p, @/ W9 P9 e
(二)VB封装实例中VBA代码4 l) }' j7 J, ^+ `
步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口
* V- X' C4 w4 a
7 z/ J- \1 A6 ]; R: [' U* `$ i9 t( t4 ]% d  i
! U3 b( G, Z  N9 ?3 o" e

" W% o/ L+ I3 y: E3 a) c- y: m; ^% |! N7 @9 h% R+ Z+ U' R2 E
步骤二:修改工程名,这即生成的DLL库名
8 s' k. H' E, t+ z% W
7 A$ C" ]- d) w4 N6 D' s* `; j- z2 y
1 W2 r8 ^, M- D2 {5 F5 M

# V1 _: [4 I5 U" U
4 r7 N; Q' S- x/ O  Q步骤三:修改类名
* B% b* x, p  s7 m3 W% q% ]# G
& a# ~5 J6 k2 I. j. ^" J! V
; Q9 `: R" U; W: `2 D, k( b4 x$ p& e+ N2 S- Y/ T( J6 T
9 E5 d/ v0 U: B1 z; C. R
步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口
: r2 j  V) R* D# r! `) f' l5 f2 Z3 g: n0 R

: t4 L0 _9 M2 A* D
! @% N9 T0 m- J/ I1 H代码如下
9 D$ h+ u- o* _9 s6 i* A( ]'将这前的ACCESS代码改成一个公用函数
: \" y/ b- e$ C( }8 R/ g'输入:strPutString 字符串变量,需分离数字的字符串
  J/ g4 w+ E$ M5 O'输出: fFindNumber字符串变量,得到的数字字符" v, Y% @; h6 a
Public Function fFindNumber(strPutString As String) As String
3 J5 x$ y: L$ ~4 z3 |7 _   Dim strOut  As String     '输出字符串变量8 ]& ?; W. S0 f7 `8 j
   Dim I
5 G: X# a; R% \$ T% ~# P  . z( ]! p7 c0 A
   '从第一个字符向最后一个字符循环,以提取每个字符
+ a5 E8 a! A$ k- c' L- ]4 F- q1 U: K   For I = 1 To Len(strPutString)
' ?& T. A8 y9 C" ]1 y! T$ A( B      '判断是否为0到9字符,是则赋值输出
- l, c' X, @# J$ X/ q, n       If Mid(strPutString, I, 1) Like "[0-9]" Then" g, s3 l0 E4 b* E$ a9 Z' C
         strOut = strOut & Mid(strPutString, I, 1)
: X" F( ]+ r3 k( O) y; {       End If  T& v$ t9 w8 M; G
   Next I
9 `2 m/ Q. M1 E' p% G   '数字输出
6 O1 J6 |1 n& W, f6 s3 r   fFindNumber = strOut
, m5 W5 l4 B9 L4 @& x$ B2 kEnd Function% Q- J0 t3 U" n" V

) y- W6 e. ~0 r6 ^, ]/ S8 ?, W( M步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。( [( P/ P  j3 h$ A

: d7 `8 c3 W/ U7 F+ Z三、        在mdb中调用自定义DLL动态链接库
. a& u- L' A3 n  i) P  M8 K0 \/ @+ h% ~+ J+ X
(一)新建数据库及窗体
# F. l* j! C  Y; r新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)$ B1 x) `( h" N3 _

' J5 X  t. q1 e  h5 M# p1 S% o
. n+ D  {1 o( n: A$ Q2 r(二)引用【我的动态库.dll】库
, B" E2 U  ?' Q7 k' ^$ j+ i按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。
) Y4 W! m4 z+ R1 g7 n0 J% l) J. d* a' S
4 x5 X1 p) L# x/ q8 S% d# f

+ N# }% t( L4 d3 T% r/ h
% k% K* _" f/ A$ {; H
9 l- X' d  r# S& Y4 r7 V
: W8 |4 Q4 Y/ C: ?. y5 b  y8 H# M0 K: Y% M, ]# S

- E# @9 B. {. m. x% P2 ~3 T7 X( P1 [
4 L" T( O5 c* d" ?$ m7 @( b8 g1 {9 K! v
(三)在【CmdFindNum】按钮单击事件中加入如下代码。
: r# I3 b/ w2 z4 a- jPrivate Sub CmdFindNum_Click()
" W, i1 {& I4 d; x  '申明自定义类
1 o; V7 v* k# I3 B2 P. ]' x  Dim MyFindNum As 提取数字% q* H4 r' y3 d7 i, M/ c3 v
  Dim strOut As String% K3 m5 k& P9 S3 T) x/ X/ m4 O( Z
  ; B5 N6 b$ U' A$ X! q$ \* W% B
  '实例化"提取数字类"对象
# R& J2 C/ s0 \  V$ |  Set MyFindNum = New 提取数字
  Q7 }; S5 g$ ^7 b2 d* r1 Z  '将函数输出结果赋值给自定义字符串变量
6 s( X! }/ u- C  strOut = MyFindNum.fFindNumber(Text0)+ a( ?/ O% C5 m1 O
  
4 x" ?- @1 X% y8 q, h+ J$ f9 V  '在消息框中显示
9 u, _2 Q: ]0 w- ]. V  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
, p# ^- p2 u( D5 ^/ f. GEnd Sub2 g% l- E9 Z7 v/ f1 X

$ n/ k9 S$ }) q* [! z点击保存后,你就可以运行一下窗体测试你的成果了8 j6 j9 G, V5 ~& L; e
 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。
& R, _% G/ j7 j- P3 ~# ]& |0 Q9 u% C! R9 G0 A% n3 p, K$ M

! q5 o$ U! B; x  f) r2 H) Q8 G

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif+ b4 A  B# i: Q! K
VB封装DLL实例讲解(一)
7 L% |7 L' j) \0 J2 |  d
十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 15:42:05 | 显示全部楼层
Option Explicit% o& u% ?' }* h/ v2 R+ N+ A, n
Implements SWPublished.SwAddin3 S0 H$ M( V, \  ~
Dim swApp As SldWorks.SldWorks* h. \+ [3 w' t! r* J' E
Dim swModel As SldWorks.ModelDoc2
+ {4 _+ F  `% t8 t$ @9 `) HDim swCookie As Long4 q8 U2 U" L: J* [" q, i- q6 m, W( K
Dim swToolbarID As Long- H) u6 A& O# v/ [5 r* e; p# j7 f" v! ]
  l; Y4 k3 V, X6 p7 N5 Q- r) G
Private Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
7 E+ h/ {7 S$ y. A5 X+ F( b   Set swApp = ThisSw& m: C4 r8 [2 T$ [
   swCookie = Cookie/ r; x# T! E4 s5 p9 q
   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie
" L; Y% L) M7 ~% F) r% _   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5
( |' g: ?! `! G   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","
  H/ x; T6 i5 [) L# P   ' R1 G6 t6 ^" c( F* ]
End Function4 Y; R; l4 U0 }2 Q' G! x1 s
Public Sub Block_MenuCallback()
- U4 X& {9 d  e! `8 q3 ]% u  Y  Shell App.Path & "\螺纹联结标准件库.exe"
- o& ~8 b/ a  p  c8 _  Exit Sub
) O# w( |9 R% J- f- m( q9 @8 cEnd Sub
" e& _, i) c* k: jPrivate Function SwAppin_DisconnectFromSW() As Boolean  [# `8 a, ~1 {" e1 ^3 T
        swApp.removemenu swdocrart, "螺纹联结标准件库", ""2 n; ~- ~. a$ U& E9 X4 I4 |
        
% g+ |: F7 b  v- J$ m- [$ tEnd Function
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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