PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

PLM之家PLMHome-国产软件践行者

[原创] C# 或 c++ 不用安装操作 EXCEL的方法

[复制链接]

2017-3-6 19:21:55 3193 1

15757753770 发表于 2016-12-11 14:57:16 |阅读模式

15757753770 楼主

2016-12-11 14:57:16

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

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

x
C# 或 c++  不用安装操作 EXCEL的方法:c++ 对excel 的操作 非常不理想 要安装excel 而且读写速度也慢
' P  p  P$ s; ~8 D3 ^net 有很多 免费的开源库 比如 Npoi库  (Npoi库 支持c#、vb.net 等语言)
2 @: K: Q2 [% I4 R5 U0 C这里我用c# 生成 com 组件 让 c++ 调
) y' d  G* X: G% H
8 s. I' R3 a1 j+ D: a5 L. h7 T首先要学会 c++ 调 c# com组件的方法   (和com注册的方法); M/ v  u  F  \+ L0 o
C++调用C#的COM组件(DLL)& r, a' U% L) f( J  m

8 N/ r) R# N; P' `下面我举个简单的小例子.我用的是Microsoft Visual Studio 2012,操作系统是Win 7.8 e, g# N$ A! q* T. n  h5 r
首先创建一个C# com组件.实现的功能很简单,就是返回两数相加的和.6 k$ k$ ^2 S, e6 @6 {" k
" J; ?; t* h9 U
! c5 R/ T/ M5 b& h& M
1.新建一个C#项目 ,类型就选 类库 .取名 MEI_AddCom
! {% i3 V6 c0 h; N$ c, I
) ~4 ]: c; h7 D2.在项目中添加一个接口,取名MEI_COM.C++调用com组件中所有的功能只能通过接口来调用,不能直接调用类或函数
  N* f- b2 B5 e8 j* Q
. D% @; J, X5 i/ F+ k* \/ \具体代码:4 c% f5 j  q' @9 c

8 u0 s  H1 N7 i/ K" nusing System.Runtime.InteropServices; //记得加这个命名空间
; W) }) _! m) J: u+ \8 I5 d" i2 A) }; R, B' _; I- Y1 V! Q% R5 P% w
namespace MEI_AddCom
' Y1 Z! W& H) K
" h. ?/ Y$ ?; ~3 F  ^& c0 I4 ^9 |# P{
, o( m6 |* M" q/ X7 _1 O: a# T/ _8 }, K1 }' O
    [Guid("DA07B88D-29F0-41cf-B3D3-611010E6F3FF")] // guid的产生可以通过vs自带的工具.点菜单栏上的Tools ->Create GUID,然后选第4个选项.Registry Format., S$ D* W7 j8 K8 q: R

4 c0 F0 X9 G! w$ ]8 h( H          //点按钮New GUID,再点Copy.这样你就可以把产生的guid复制下来,然后粘贴到这个地方来.当然那个大括号得去掉.后面需要用到guid的地方也用这方式产生
# w) g8 C  c$ a0 k  I& y! d  X
7 X( F( @, k8 o    [ComVisible(true)]* @7 z/ m/ p  t3 }
  T; y* |; A% }  o" d$ r3 Q& K
    public interface MEI_COM        //记得用修饰符public
. k0 }2 i, z4 R- Y$ k9 I
3 i: [. F+ h4 T* {, l7 e! Q    {& u. A9 Z- F- f

8 k9 n2 q$ z/ T! h$ N- }$ z        [DispId(1)]       //如果还要添加其他函数就继续来个[DispId(2)],[DispId(3)]加在函数前面
( \0 B/ ^5 m- ]# D7 [
" F- y& ]' p) E! L" {, x        int Plus(int one, int two);
- ^  K. s# J% g! i/ X: @5 L9 ~# |5 }/ X0 ]: ~
    }( `! M! d/ q' X/ G& [, P/ L' R

3 j& D) m& p* B4 N& l3 ?/ k8 _6 g}# p7 h, R" a# X' L* t) L0 X
8 R" Q6 l7 U5 Y% x: i5 e

5 Y+ ?. p- i7 p7 [( W! h# l5 o$ P( Q* V
3.添加一个类MEI_COM_T,继承接口MEI_COM,具体代码
$ h3 A7 L! I7 ^* a
, Z* x+ U" t) z% C* P6 Z* qusing System.Runtime.InteropServices;
% s7 S$ p+ t% o9 P2 y. K# n) L* o: [" e: t4 l: j& s4 U+ k
namespace MEI_AddCom3 d; i4 u* @+ F5 E" y4 Q
: g4 B2 ]2 e" e7 N# R+ R
{. H4 z5 c( {, v% @

3 z3 C0 Z) k$ u8 l( P    [Guid("04F4DC83-8883-4a03-BDBC-92D8630ECC1F")]6 f+ x% h$ m& A! T
! C) Y1 `* v8 T+ B9 g) K
    [ClassInterface(ClassInterfaceType.None)]
% V- @: I0 F; `( E. d2 |
0 G; u: d* K- i: i; Y* V4 `( I    public class MEI_COM_T : MEI_COM
) n9 m/ {: p4 C$ i
" y2 O) Q6 c# |! A. T/ W    {
/ y( X5 I, Y" r/ K& ~2 u6 i$ E5 L6 \* S* ~! S9 C
        public int Plus(int a, int b)  q6 g+ @- B1 ]' E. I% R7 ^5 |+ g6 \

2 y7 }3 j: K# r3 ]- d# B        {4 @" P7 L/ q: {% y( {
: J. `& n$ ~% u; S
            return a + b ;
' |) b3 t7 \+ N$ Q; X) i0 Q) I+ _/ T8 A9 b9 s9 p
        }
' y8 h) j2 A0 l4 n% f4 {4 g8 o( ^) \  f& q2 F& J
    }
; s* E* K* P8 A0 d# @$ N' O+ h
' t3 O1 q0 h# J7 F+ l- M}
: ]8 b$ h, D1 L) t) m' {6 D4 f/ k

% s" W9 D! P2 |4 d1 k
- p- `8 l/ b6 B4 _# p4.把AssemblyInfo.cs中的[assembly:ComVisible(false)]改成[assembly: ComVisible(true)]./ C+ V9 u) `+ o2 m8 ]  h

% S% e2 r1 l1 V# b5 h右击项目名打开属性窗口,在生成里,选中 为COM 互操作注册6 B0 g4 x( Y) a  `9 M$ A4 R

2 ~, x) C2 v) R& P9 m, K
8 B( j- U% ~- k: Z+ h0 J8 B8 a5. 生成->生成解决方案$ {5 c0 N% p5 U( a% S; j( Y. H( ^
   注意 这个时候 生成 非常缓慢
: a/ u" W& s5 t+ |( j$ B8 ^   直到 出现 成功 1 个,失败 0 个,为止才 操作一下面内容4 b' b5 [& S. T' v' o' ^6 W8 @

8 _( s) T" {2 D
9 i( z3 q4 k# {# W---------------------------; t. X' X) G0 v8 c

" ~- T% G: ]; Z# L4 ?2 U7 G* ?1.调用前要先把com组件注册才行.
9 o3 o; Q2 L& U1 a! g5 X! D: c& S% c
使用C#创建并注册COM组件  C#不能直接创建COM组件,因为其生成的DLL属于程序集,但可通过“使程序集COM可见”选项来支持COM。
1 R0 ]' O- E3 G+ t5 u以下说明如何通过C# 注册、注销COM组件。
# V$ D( F. L4 A! g7 R2 b
9 e0 |, \0 `8 z% y4 {为了能让生成的DLL能够进行COM注册,需要进行强名称签名1 g( ^; C& y" H) r& H
打开COMLib项目属性,选择签名,勾选为程序集签名,通过下拉列表选择新建,弹出创建强名称密钥窗口,输入名称,不勾选使用密码保护密钥文件。
0 L# S& _* ?8 P* E) E: @- h创建完成后COMLib项目中将出现后缀为.snk的签名文件。. o: C1 v3 u; b9 v9 @
最后,编译COMLib项目,生成COMLib.dll文件,完成COM组件的制作。  注册COM组件:  如将COMLib.dll放置D盘根目录下,以管理员身份运行CMD,提示符切换至C:\Windows\Microsoft.NET\Framework\v2.0.50727,输入“RegAsm  D:\ COMLib.dll  /tlb: COMLib.tlb  /codebase”,回车后得到如下图所示结果,表明注册成功。同时D盘根目录还会生成COMLib.tlb文件。; H) R" G/ t$ Z% C4 c
卸载COM组件:  8 v! }4 O( p' M: P
与注册过程基本相同,只需将命令改为“RegAsm  /u  D:\ COMLib.dll  /tlb: COMLib.tlb  /codebase”。0 C1 ]0 a) S  \. K
. y7 C2 e3 ~* I5 H, f# T

- B' O/ r  d; X6 X: F5 o2.注册完了就可以在代码中用了,先新建一个C++程序, 类型选 Win32 Console控制台应用程序
" t; ?0 |4 x3 R% T9 o
! e5 e- T& `3 |) q& I7 C名字取MEI_UseCsharpCom,点完成
. g7 c( q3 [+ B: m- }8 H2 q2 `+ z0 u6 H
把MEI_AddCom.tlb文件拷贝到项目的任何目录下.我就放在D:\MEI_UseCsharpCom\MEI_UseCsharpCom.
- ?" [! z" C$ x
+ k  \( F2 Y9 K: w; W5 L- l我们会看到一个MEI_UseCsharpCom.cpp文件,双击打开把默认生成的代码全部删掉.敲入下面代码:
. G) z% ?9 }2 ?/ s4 n0 A  I7 A$ f8 d! v3 T. a' h2 B2 n) O4 l; O
, i) H1 G9 f) P2 u. g
#include "stdafx.h"" `- e- p1 l& P6 \( W) ]# n4 `
#include <windows.h>
" r3 Z/ k' f& o9 z5 E+ X#include <string.h>
% I2 w" t- u# k4 {$ \. Q
: \3 L/ f6 S! Y#import "MEI_AddCom.tlb" named_guids raw_interfaces_only
) V) x2 p8 i# m
. i4 j5 A2 {: j* ^: v5 b* `0 [char* WcharToChar(const wchar_t* wp)  //wchar_t转char*
, [, {( ^& `8 W3 @) l$ s2 ?1 v: t{  
; n9 M3 P( m# P2 i4 p    char *m_char;$ v' U4 N, W0 c! n$ w' n8 q+ u
    int len= WideCharToMultiByte(CP_ACP,0,wp,wcslen(wp),NULL,0,NULL,NULL);  
% Y1 ?3 A' H6 f3 P9 h) I& Q' x; ^1 k    m_char=new char[len+1];  
- w! J8 r$ `) c- s1 N2 V    WideCharToMultiByte(CP_ACP,0,wp,wcslen(wp),m_char,len,NULL,NULL);  5 |( ^  @% z' a; w
    m_char[len]='\0';  
2 U& D6 e; @& l. l    return m_char;  
: x2 C% ^7 v3 Q# V6 C) e}  - `1 j( [& U1 \
wchar_t* CharToWchar(const char* c)   //char*转wchar_t* ?  Z' W2 q) _, \3 `0 A& L
{  
( G0 o! _0 s0 d   wchar_t *m_wchar;
  O9 u3 t. B$ v/ f/ d7 V/ f    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
$ c. W: l4 v- C6 w+ k( p    m_wchar=new wchar_t[len+1];  
# w7 m, |2 c. h0 K) B% [( [# P( w2 i    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  ( l! E8 ~" N: c, L6 o3 }! }
    m_wchar[len]='\0';  ; ]+ d' I( c- T
    return m_wchar;  
" f: Y5 d6 ?. W+ {}  ( Y/ T9 K& }8 |9 Y
. d. P5 K" a9 K9 }: ~* O! _
void _tmain(int argc, _TCHAR* argv[])1 r  D3 K6 @0 m2 Z
+ ^; Q& r, u- O* q, {/ x
{
+ h3 K6 R$ ?. P- Y; V3 o  b8 h4 [! ^, G/ s2 \) \
    CoInitialize(NULL);
- D" P6 H0 m$ g; V1 m. A! H: k9 u( f0 j! U) U
        MEI_AddCom::MEI_COMPtr ptr;   //类似明志一个指向接口的指针
. ?! B7 R& d4 K3 [! Q: E+ g& z& r. ]$ u2 @8 w- W+ O2 c' K) v
        ptr.CreateInstance(MEI_AddCom::CLSID_MEI_COM_T);   //实例化一个类 CLSID_ 类名
& f' Y: E5 v  `) u6 I7 s; x" {$ ?4 Q* |5 C) x& o+ }# s6 i
   //这个地方有一点点奇怪我也还没弄懂.在C#中的函数是int Plus(int,int).但类型在这里都转成long了.另外就是我们不能直接
, {0 X  R7 A" A! t" \+ E0 w
  G4 n4 g: f- V0 l5 G   //来个long a = ptr->Plus(1,2);这样得不到a = 3,反正会出错./ l2 @9 t. W5 Q0 u, D' L9 u
   //这里函数Plus的参数变成三个了long Plus(long,long,long *).其中最后一个指针得两数相加的结果
0 l/ m+ e  ?  L; P  z6 c8 R" X' H2 y! p5 o' B6 B/ z+ R- p( I
   long a = 1;
  C! A! [  Q' w* I3 r3 z
* g: w2 p8 p( V/ K7 P   long * lPtr = &a;
, Q; C1 x  [% k5 j& B
/ C; O3 _' B( K) a1 O    ptr->Plus(1,2,lPtr);6 V6 y6 l; ?! L: Z7 t6 e0 }
; c, o  t4 ]: `" T9 K
    char msg[132]="";
' ]. B: |3 y! n    sprintf(msg, "%d",lPtr[0]);2 S9 }# ]$ H- E4 Z
4 S1 F7 @) c5 v- I" o
        LPCWSTR str=CharToWchar(msg);5 v) \+ b8 w& K! J* _# A

3 n5 T+ t" M7 \: H: G5 \9 w    MessageBox(NULL,str,_T("123"),MB_ICONWARNING);
5 K# i6 R+ h, c2 a1 W' I
4 M/ }' a6 E/ `+ @4 C' ?/ J, Z- R8 t5 `+ X* Q/ b
}
& _7 z8 \4 }6 C/ A) H, D0 q* R2 _* \8 s4 f  q: k
此时就可以正确运行了.得到结果3  w; h6 N$ X. J: Y
# Q' @  H3 o& N0 |8 F8 I* |
如果没有正常运行,则必须把dll文件拷贝到有MEI_UseCsharpCom.exe这个文件的目录下.5 i3 G4 \  ^8 [' [) x8 b
! @! A/ j8 {4 f4 Z

# {( k+ v  c' q/ l% N' q" L5 H--------------------------------------------------------------, N( e: g4 X9 f
C# Npoi库 操作excel 的代码网上很多2 i# I$ H  H" i8 x+ \  W4 \
0 C/ W. s+ p) B8 C, p
// ----------------------------------------------------------------------4 c' e! n6 N6 q- f9 V* w: U# q- z
// 使用Npoi创建一个简单的xls文件,写内容" L/ b/ p- u2 y; h

- n. Y) }! D% b  J# q) D3 ~8 uusing System;# J" ^$ Y6 C' V- d
using System.Collections.Generic;
" F) n( r  i# }6 x1 W: \using System.Linq;
2 ~4 z7 r4 P0 G' }0 R* susing System.Text;* G# h: {( P: W2 C: c
using NPOI.SS.UserModel;
  x3 k& d! i2 u% \+ D. [7 L% Wusing NPOI.XSSF.UserModel;# y2 p% i7 _# G1 h
using NPOI.HSSF.UserModel;
. m& j6 T5 s2 q9 w. Kusing System.IO;' ^, B9 U2 y8 l% r- o3 q0 j
using System.Data;
/ {1 d7 V% b# U; l8 u7 @
2 Q( @/ m/ |- W+ W7 A: @//using System.Windows.Forms;
0 c# r: P; y7 A, m/ T4 w5 z
0 T% _  c% z- }; E: m* j' Cnamespace CC: D% e* V0 y# Z1 k* _: N! [7 {
{
, H" b& M$ F9 k2 N/ ?5 a9 ^/ l' ]- ^1 Z9 o7 F
    class Program6 X" M1 D$ p+ v! j3 M4 j+ \  g
    {
0 J" |: a8 L3 m4 n) p& S- w% O1 l, y/ h: ^

5 B) O3 Y% A+ o2 l! J1 S- J2 m& K& f        static void Main(string[] args)
% M! s! m! l8 W% l( [0 b1 ~        {" o- E8 _, x/ V( M7 }; ?
            //创建工作薄% \. a& B& u1 c& E( _& y( k
            HSSFWorkbook wk = new HSSFWorkbook();
0 n* D6 H2 @% A; h            //创建一个名称为mySheet的表
! v, k& s8 [3 y. ~5 N. f! ?, Z            ISheet tb = wk.CreateSheet("mySheet");7 p# Y8 S4 n% x
            //创建一行,此行为第二行
, J. {4 `' f0 }+ s6 k            IRow row = tb.CreateRow(1);
" J8 [* Z  N. O( S            for (int i = 0; i < 20; i++)6 S5 E+ h! H5 x/ a, q; M
            {
$ M8 ^2 a* n( F6 [3 g' i                ICell cell = row.CreateCell(i);  //在第二行中创建单元格
  |# B- t+ ^' u5 y# S' {                cell.SetCellValue(i);//循环往第二行的单元格中添加数据
8 r$ z) L" W& d5 J/ E- h/ w            }. ^( o1 n* h) p: a2 |4 n
            using (FileStream fs = File.OpenWrite(@"c:/myxls.xls")) //打开一个xls文件,如果没有则自行创建,如果存在myxls.xls文件则在创建是不要打开该文件!& t/ a, b. o4 G( [" _
            {) M3 B& P" w, k  A7 V  h& y
                wk.Write(fs);   //向打开的这个xls文件中写入mySheet表并保存。- D3 j1 _% |7 z3 R! m0 R: `! D8 B
                // MessageBox.Show("提示:创建成功!");
  x4 d, A$ a1 l0 X  A# ?            }- U9 m: i" x! F+ V& ?! `" l

' ?3 ?, W2 R) {% b" m        }
7 E" d7 N5 N3 s# C6 M4 Q8 h8 ^/ I% `/ K7 @! l

+ n: c: n7 f0 `9 ]& ?8 M. y    }  c0 Q2 \. B3 z" t( w

( N6 z+ e0 a: Z+ w4 w* X  C& \8 H1 A
/ E# o! p: u$ L( y) y$ \/ U
$ D) q5 m1 ~' s}
  r+ z! T' x! A# q
% H" o# `$ w. q% X% z. s0 ]0 B// ----------------------------------------------------------------------
& F" k4 Y' }. ^& F/ n. v$ R  w: g// 使用Npoi读一个简单的xls文件: ?+ G7 h, g) c2 j
& a. b. }) \, @# I; j
using System;
3 P. x6 ^& Z# ?# i3 @using System.Collections.Generic;
; F: `2 e4 W) lusing System.Linq;) q. Z# O9 {0 _- y1 M
using System.Text;
! ?( o0 m3 A$ [! Y- [1 F1 ?5 f2 J8 kusing NPOI.SS.UserModel;
, u& `. x; k: o+ Y! X) j! X8 Z$ Zusing NPOI.XSSF.UserModel;9 E+ Y! W3 r" j# v* |1 Z
using NPOI.HSSF.UserModel;
( p0 g) Y. R  J" P% M) c% J, ?. uusing System.IO;
" ^4 ?) W6 \5 ?) m! dusing System.Data;
+ s4 O  o  G# q6 O( S  f) G% D8 `
% z  o, k% A# t8 r2 x6 f" ]; o0 Tnamespace CC7 W% y  Y2 E6 [' O' O0 X0 k$ u
{
+ ~# o9 ^, W8 j; z( ~. ?$ ^" E# |
    class Program8 P8 h1 v, k9 I
    {1 V- v0 E# r& ^5 G' }
6 f! ]6 b8 O6 K6 e# }* w

/ h4 T0 L* h- R* Y0 q  p        static void Main(string[] args)
1 [% q5 x4 H' U8 D        {
2 d3 W' r) [/ E" E            StringBuilder sbr = new StringBuilder();6 S4 d4 i) i" h* Q6 r
            using (FileStream fs = File.OpenRead(@"c:/myxls.xls"))   //打开myxls.xls文件
: i% z  C9 h' z5 f* M- ?! Z            {
6 ?) ~" b! K+ \4 D; p                HSSFWorkbook wk = new HSSFWorkbook(fs);   //把xls文件中的数据写入wk中6 ~0 I9 q5 T! {
                for (int i = 0; i < wk.NumberOfSheets; i++)  //NumberOfSheets是myxls.xls中总共的表数, B) ]' c. w* o8 q
                {6 s1 o  e% Q4 C2 R; |; O9 z# V
                    ISheet sheet = wk.GetSheetAt(i);   //读取当前表数据
6 Q. c3 K3 f* T& K5 R' I                    for (int j = 0; j <= sheet.LastRowNum; j++)  //LastRowNum 是当前表的总行数4 x( j6 }. W7 ]1 V9 P# \
                    {8 Y* ~/ g! G1 U/ Q9 l5 J* F
                        IRow row = sheet.GetRow(j);  //读取当前行数据- N/ p$ o0 @0 D2 W0 m# b! {
                        if (row != null)8 e3 i# H8 z& [
                        {5 |$ C) U8 H! I, ^( I
                            sbr.Append("-------------------------------------\r\n"); //读取行与行之间的提示界限
! l  g. P3 o# V  I% u0 S                            for (int k = 0; k <= row.LastCellNum; k++)  //LastCellNum 是当前行的总列数
8 V& `8 f7 g) ^0 d; y, z1 n                            {
. F% ~4 u4 n% }" d0 n, y                                ICell cell = row.GetCell(k);  //当前表格
& s* p$ N! ]2 m6 y& y( c6 [9 e6 B                                if (cell != null). v' r8 ^" s; q8 j: i; a
                                {" h: s' R* p- s2 f* K( L
                                    sbr.Append(cell.ToString());   //获取表格中的数据并转换为字符串类型! X" F- w, v  s, V3 \" x; A* E  k" p
                                }
& m4 i! E; L& d: G                            }3 X; E1 s2 O! ^
                        }; |! u) H+ y1 a% l: K( C
                    }1 a' Z; P1 U# N) L! U# w
                }" X) R4 d! Z. L2 K
            }  m6 u# w3 \2 s
            sbr.ToString();
$ q, F) l. Z( L- P1 M- z- f% j            using (StreamWriter wr = new StreamWriter(new FileStream(@"c:/myText.txt", FileMode.Append)))  //把读取xls文件的数据写入myText.txt文件中
4 W' _/ ~& e4 o% ]- M7 A0 @            {
1 `+ ]9 S8 s! V3 v" i                wr.Write(sbr.ToString());
0 {5 C, y. V+ m) K- _                wr.Flush();
4 d/ j. Y) |" k$ S            }
9 X1 m: K; r0 B( P8 y9 q7 h  A- _% W% W1 j0 V* b
* J: E: |* V+ Y$ @
        }. P& q- w3 J( n% A( ~7 s
( q, \5 R/ ^  B

% A- {5 r9 J" H( g/ t    }: i1 R+ @' I/ e7 W5 l/ h- b

! f3 G# X8 |4 g; h* D
% c5 O& w  U' J2 f+ t4 @3 Q! U7 p$ p3 z% v2 H2 |. |4 [8 r
}
3 d/ x+ l3 e' E! F6 T, p
# t% D, I, U  r( x& X+ m
. r& ?* J$ l0 V( Q/ n3 E4 q然后 自己封装 给 c++用
! C( `3 i4 O; H! B
$ A; W0 {# `, G$ L9 ]
5 [5 b: T/ a: c0 _  h
& D" \. P1 K- K- O1 |+ d0 @3 U6 _; l4 L+ U3 o5 d
3 w' R3 `5 n$ Q6 N) {3 K: }
+ A, b: d0 }  X$ u- d
' i3 U  C! n9 C- w1 U
1 @, Z3 |" X8 p2 G6 Z) ~
  h+ ^* {, ?0 j
4 w7 k/ B$ Y) F  G& Q

( I, b7 T. I% u: K) `" ?6 N3 I6 L! M" |# _( C5 y+ _: a
5 }) n: d- O3 w

. R9 p, c  n- c* m
3 p2 `4 m9 t( q' n3 l, k) @

8 q2 w7 n2 t3 m+ V& ?0 G1 ~) c3 z( J( x, u/ w/ F+ ]$ ?- O# N
  [4 m9 U7 Q+ ?: C

  {, N8 z- e& U. ^$ f- J: [) q3 M: c: w# ]) p, R$ a/ U
7 [# O1 r& S' f

% A) u7 p7 H5 f0 }
' ?4 H8 B; V) a3 i5 l3 H
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复1

f1405602 发表于 2017-3-6 19:21:55

f1405602 沙发

2017-3-6 19:21:55

梅大师,就是叼!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了