QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

[求助] 哪路大神有 DLL创建solidworks的菜单 的程序呀

[复制链接]
发表于 2014-5-17 21:50:44 | 显示全部楼层 |阅读模式

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
用vb6.0编辑DLL插件 然后可以在solidworks里添加插件显示菜单, 如果有的话指导下 谢谢谢
发表于 2014-5-25 15:42:05 | 显示全部楼层
Option Explicit
7 R9 t8 [4 a9 n/ `. @4 _0 oImplements SWPublished.SwAddin. q. X" K2 ~/ E% c, @0 L
Dim swApp As SldWorks.SldWorks4 |& }. w  I5 m7 ], q9 w
Dim swModel As SldWorks.ModelDoc24 @: `- ^! j! Q+ ]/ p# y
Dim swCookie As Long  \: p/ z& P/ c. H( I0 W4 V
Dim swToolbarID As Long
$ j( `9 [( \7 Y# f  d# ?
: h2 b: p; q2 P4 N5 n! r; iPrivate Function SwAddin_ConnectTosw(ByVal ThisSw As Object, ByVal Cookie As Long) As Boolean
7 R- l8 e% x; f2 D   Set swApp = ThisSw/ {% G# e( e8 Z  m
   swCookie = Cookie1 U7 e& ~: f3 C0 F
   swApp.SetAddinCallbackInfo App.hInstance, Me, swCookie
' [* _5 ?' C5 V- v! c+ f! z' m   swApp.AddMenu swDocPART, "螺纹联结标准件库", 5
5 K- p' E+ u4 G  G3 C   swApp.AddMenuItem2 swDocPART, swCookie, "螺纹联结标准件库@启动", 1, "Block_MenuCallback", ","
( `# U! }2 @$ _' ?8 m. x   
' y6 i5 e; b- R3 FEnd Function
9 F. c2 G  W& w+ y0 G( PPublic Sub Block_MenuCallback()
8 C6 @! Q! l) R/ v5 F( a  Shell App.Path & "\螺纹联结标准件库.exe"& m1 P) e% z; z) ]0 C' d! U
  Exit Sub$ ]: P  I. ~3 ]# {. k7 x
End Sub. ~- H0 l/ V3 n2 K" M7 i! ]
Private Function SwAppin_DisconnectFromSW() As Boolean
/ {3 Z/ }. ^# q; I        swApp.removemenu swdocrart, "螺纹联结标准件库", ""
1 r& S& F( [/ {2 e        # B* l  R4 B/ b; _
End Function
 楼主| 发表于 2014-5-25 14:50:09 | 显示全部楼层
yjyeming 发表于 2014-5-25 11:37 static/image/common/back.gif
0 P# P' i: f, u3 \VB封装DLL实例讲解(一)
: c% s0 |2 }& r& x
十分感谢你的分享,但是貌似和我问题关系不是很大。不过还是thankS
发表于 2014-5-25 11:37:42 | 显示全部楼层
本帖最后由 yjyeming 于 2014-5-25 11:44 编辑
. G4 z7 \" `/ K& V; X5 E' x9 k
! l0 q; u- t* a1 xVB封装DLL实例讲解(一)# z5 l; S8 E; s* L" @
& y* n% M$ S4 m* Z
! {  g/ B' @% _
一、        DLL基本概念( ]5 S  J. T! l. `& s
(一)概念3 Q+ D- u! q" u1 f' Z) R% c
DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。+ @, |8 C( s! P- U
(二)主要优点:. z% ~6 C& m4 N' F! J* n
1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;
5 h  K8 ]/ b+ C+ p+ I- Q2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;! h: C( {* V+ l" s9 z- O  ?  L: r: Q
3、从ACCESS角度而言,还可以更好的确保核心代码的安全。& C7 V) O, g5 O% I' A7 Y' r
5 [& @7 O3 f2 u/ n/ N( J& w
二、        用VB封装VBA代码,构建自定义的DLL动态链接库& K8 G6 P9 c$ v
(一)ACCESS中实例代码
+ Q0 x' w6 [6 }$ G" u9 Y4 j下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。( P& X! \6 [, ?" O* V
我将就这个实例演示如何将该实例VBA代码封装成为DLL。
6 _; ^- l5 ^1 l0 L) i# r 4 n) ?8 [: H3 s$ _. Y/ [

  r. q/ ^$ B* B" W+ u* }# m, h* q! K( E5 j2 U- V5 D% n3 _( Q
 按钮单击事件代码如下:
8 q7 W) h1 n; r+ vPrivate Sub CmdFindnumber_Click()8 o' h9 z- d3 P0 y- x
  Dim strM   As String     '初始字符串) }2 Y: h- x) H0 ^6 V9 X& ]6 H
  Dim strOut  As String     '输出字符串变量
$ v3 I$ V5 n9 }/ I  Dim I
/ G9 c' ]9 q6 c0 I  
% p& [, n: Q! G2 l9 y& g1 w* d  strM = Me.Text1
! b8 f- S+ x4 y5 g9 U5 T/ `! u) [3 X'从第一个字符向最后一个字符循环,以提取每个字符2 L: H* c4 B/ E/ ]$ G
  For I = 1 To Len(strM)5 \: ~1 B( ^/ t% s! w# u
      '判断是否为0到9字符,是则赋值输出& U; Y' @$ O" f  e) X2 ?8 {8 `
      If Mid(strM, I, 1) Like "[0-9]" Then
" O# T4 Y1 Z# I' g3 x4 l         strOut = strOut & Mid(strM, I, 1)6 \+ Y/ g0 e- x( K! T: Z
      End If
+ [2 C; F2 u  W! o0 ~  Next I- j  K# A9 i9 o( a# E
  '用MsgBox函数进行输出测试
  f! P# C- G7 q  MsgBox strOut  j  m, S: f  K! n+ k! ~5 u
End Sub
. F% B# v) ^$ x' l    以上代码还不能直接用于封装,须将其修改成为公用函数(过程)
6 ?, s1 ~( o% A" T: L; @$ C" n/ _& N2 `; R
(二)VB封装实例中VBA代码
, }" O* @$ k, v2 M步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口  K+ L5 Q* a4 y1 a9 }5 s

' j) _9 b" ]( k' i" o) F  D9 Z, j; W- ^! g; V; s5 k
: }9 A, i, o2 x8 S0 G

/ `+ L  ^1 E# b! v* q5 p; Z# {: [: C* D9 @
步骤二:修改工程名,这即生成的DLL库名2 t! u4 w, c$ g8 M3 F. ?5 o
# N8 J' m" f2 S+ z  p8 q

) a; x: O  B. U8 K1 l' i  ^: Z$ G+ n5 c: t& Y

1 W- Q9 e( d+ o1 }3 L) U% C5 z4 }' c* _
步骤三:修改类名) Y& r3 O, |6 b! ^% C

1 y. N* S1 ?) Q- K8 R4 ]& o" A" z( d6 n0 w

4 u* O5 f! A% z4 b2 f
$ o3 P& `, ?) F: W3 ~: H步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口+ [6 R1 p% v# [' V

% O% F8 Q( m$ A
1 a2 x2 ^8 X. ^, f- o
: R8 U! O3 C1 |1 H* w* H9 U代码如下
1 H8 u  [2 ^8 x' P( P% Y0 L/ R'将这前的ACCESS代码改成一个公用函数
% ]' `# o/ v5 c2 t9 }, P# m'输入:strPutString 字符串变量,需分离数字的字符串1 w1 B$ [! o# S! q' Q$ A
'输出: fFindNumber字符串变量,得到的数字字符
# g0 j  s; t2 x- XPublic Function fFindNumber(strPutString As String) As String
+ ~! h: J# l- o  B& u; q   Dim strOut  As String     '输出字符串变量
, q* D4 \, r# Q   Dim I
- p' x6 G# a4 {( o* ^  & d& s* |5 G" y4 f& S% W
   '从第一个字符向最后一个字符循环,以提取每个字符3 ^  w( S; }: O" s# u
   For I = 1 To Len(strPutString)
6 n* \/ x! w+ k# [/ p      '判断是否为0到9字符,是则赋值输出* {0 }- V3 p. p
       If Mid(strPutString, I, 1) Like "[0-9]" Then
7 e+ a) ?& `# I3 }% P! G         strOut = strOut & Mid(strPutString, I, 1)* S6 n8 g5 ~0 Q. H. C  t/ I& U3 ~
       End If
- D- I3 X9 T  p( F; a7 ?" j   Next I
4 @0 F3 i2 F+ i1 }* B" i   '数字输出. ~" M3 Y+ K# K" ^
   fFindNumber = strOut
1 F+ n6 ]6 a; DEnd Function* G0 ~7 s- ^3 F

/ J; w4 }" j8 Q9 |步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。% w5 T8 A5 U2 c& j

6 Y& A( N, ]: T/ M4 ~- [三、        在mdb中调用自定义DLL动态链接库9 S5 z; t, ?8 O
% A# B% ?; v* A* W2 ^5 C( W2 L% n
(一)新建数据库及窗体
) z: [. M2 m! ^: |' @' K新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
+ D2 ~3 f1 I2 \( c
4 P) p  ^) x. L( p
; F/ r. t- O% r& N) `9 u(二)引用【我的动态库.dll】库) C* k, x* v& u& Z/ e
按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。' j* R9 L4 S- @# W( Q: j2 w
! o; W, \* U/ |. c  G

0 l2 n  L/ G" k' k' a! ]7 t' c/ U& T4 D9 U; R7 ]
1 d; d9 l! X6 J" W% z. u( g

* X$ n2 r8 h, \6 L+ _5 ]+ Z7 C" m# h

) S: S* Q$ G- j* M. T5 A7 X* W' u3 M, U4 @# N5 S$ c  a5 G1 }
: ]6 K1 z* `, F  |

" t; c5 U2 M* `(三)在【CmdFindNum】按钮单击事件中加入如下代码。9 L: C: o4 d- O- y# V% E/ ~
Private Sub CmdFindNum_Click()1 ^8 z1 Y& G& H0 B2 w) ^, Y; ^- T; G
  '申明自定义类4 u$ u8 Z0 O" M" {6 n
  Dim MyFindNum As 提取数字  {" p# }" [$ E0 L$ y
  Dim strOut As String" E1 C" B, q) o3 r5 u* Z
  
" \/ k7 P( G6 A: Q% |; |! Q  '实例化"提取数字类"对象
8 i4 s1 G  J- B# Z# Z  Set MyFindNum = New 提取数字
6 r7 s4 _3 y" W* y/ Y% K6 B  '将函数输出结果赋值给自定义字符串变量9 b; ^6 n; R5 w" ?9 H/ ?
  strOut = MyFindNum.fFindNumber(Text0)* L7 V$ E" k8 E) N
  / X2 l  j+ E, L2 m* k" x
  '在消息框中显示( e: a# x9 c' M; q* _* }" _
  MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
" Y1 v5 _& `( x% XEnd Sub
6 S: Z: m7 p2 o! ^$ K
" ?# R3 C4 E/ V点击保存后,你就可以运行一下窗体测试你的成果了# `  q: ]( ?  S# |6 P
 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。
( @; l" i- ?% V8 R( T( _' C' j2 K& e+ Y/ d2 z
) ]' D1 E* ]* }  r2 p* O/ v

VB封装DLL实例.rar

139.48 KB, 下载次数: 4

发表于 2014-5-22 21:20:49 | 显示全部楼层
是什么东西
发表于 2014-5-22 10:29:31 | 显示全部楼层
V97_1五軸加工概論.pdf
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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