UG/NX二次开发Siemens官方NXOPEN实例解析—2.9 InteropCallCFromDotNet(VB调用VC++ DLL实践)

 列文章目录​​​​​​​

UG/NX二次开发Siemens官方NXOPEN实例解析—2.1 AssemblyViewer(树列表)
UG/NX二次开发Siemens官方NXOPEN实例解析—2.2 Selection(选择过滤器)
UG/NX二次开发Siemens官方NXOPEN实例解析—2.3 Selection_UIStyler(边倒角)
UG/NX二次开发Siemens官方NXOPEN实例解析—2.4 File2Points(读取文本)
UG/NX二次开发Siemens官方NXOPEN实例解析—2.5 QuickExtrude(拉伸)
UG/NX二次开发Siemens官方NXOPEN实例解析—2.6 CreateNote(注释)
UG/NX二次开发Siemens官方NXOPEN实例解析—2.7 DiameterSymbol(标注符号) 
UG/NX二次开发Siemens官方NXOPEN实例解析—2.8 DrawingCycle(图纸打印)
UG/NX二次开发Siemens官方NXOPEN实例解析—2.9 InteropCallCFromDotNet(VB调用VC++ DLL实践)
UG/NX二次开发Siemens官方NXOPEN实例解析—2.10 InteropNXOpenWithUFWrap(NXOPEN与Ufun混合使用)​​​​​​​

前言

        随着工业智能化的不断发展,UG二次开发的需求越来越多,也吸引了大批的二开从业人员,本人作为一名资深IT从业者(10年+)也毅然加入二次开发大军。

        然而,和流行IT行业(互联网、金融、医疗等)相比,工业智能化的门槛显得更高一点,专业的工业软件,相对封闭的开发理念和更小的开发圈子,让刚进入二开的从业者有点举步维艰。边学边整理,希望通过这系列文章的整理能给二开的生态增添一叶绿。


一、知识点提取

本实例实现了通过VB调用VC++的dll的方法,主要知识点如下:

1、VC++程序申明可以被VB调用的外部方法

2、VB程序通过DllImport导入VC的非托管程序集,并指定需要调用的方法

3、VB程序调用C++方法

二、案例需求分析

1、调试截图 

2、需求说明

这里来说说为什么要用.NET调用VC的非托管dll,原因有二:

1、我们在做ug/nx的二次开发的过程中,经常会遇到一些内部方法C++可以调用,但是.NET程序无法调用的情况,那是因为西门子的Open C函数C/C++可以直接调用,而.NET程序调用都是UF Wrapper封装的Open C, 而UF Wrapper在封装的时候,并没有完全封装。所以,我们需要通过调用VC的非托管dll,间接调用Open C函数。

2、出于知识产权的考虑,很多项目要求dll加密,但是C#是基于IL 中间语言和 .NET Framework CLR 运行的很容易被反编译,通过C#调用C++无托管dll,就能很好的从根本上解决问题

三、程序分析

1、源码所在目录

UGOPEN\SampleNXOpenApplications\.NET\InteropCallCFromDotNet

2、主要功能分析 

1、VC++程序申明可以被VB调用的外部方法

extern "C" __declspec(dllexport) int UFappFunction1(void)
{     
        return( myFunction1() ); 
} 

extern "C" __declspec(dllexport) int UFappFunction2(int value, char *string) 
{     
        return ( myFunction2(value,string) ); 
} 

2、 VB程序通过DllImport导入VC的非托管程序集,并指定需要调用的方法

<DllImport(UFAPP_DLLNAME, EntryPoint:="UFappFunction1", _
CallingConvention:=CallingConvention.Cdecl, CharSet:=CharSet.Ansi)> _
Shared Function UFappFunction1() As Integer
End Function

<DllImport(UFAPP_DLLNAME, EntryPoint:="UFappFunction2", _
CallingConvention:=CallingConvention.Cdecl, CharSet:=CharSet.Ansi)> _
Shared Function UFappFunction2(ByVal value As Integer, ByVal str As String) As Integer
End Function

3、 VB程序调用C++方法

    Public Sub Main()
        Try
            Dim value As Integer = 88
            Dim ret1 As Integer = 0
            Dim ret2 As Integer = 0

            theNXsession = Session.GetSession
            theUFsession = UFSession.GetUFSession

            theNXsession.LogFile.WriteLine("BEGIN VBapp (Running from File->Execute)")

            ' Call Functions in UFLegacyApp 
            ret1 = UFappFunction1()
            ret2 = UFappFunction2(88, "This string is from VBapp")

            theNXsession.LogFile.WriteLine("funtions1:" & ret1.ToString & " " & _
                            "function2:" & ret2.ToString)
            theNXsession.LogFile.WriteLine("END VBapp")
        Catch ex As Exception
            UI.GetUI.NXMessageBox.Show("NXOpen automation example", NXMessageBox.DialogType.Error, ex.ToString)
        End Try
    End Sub

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MarcoPro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值