在C#中直接使用Open API的方法 / A Method of Using Open API in C#
2010-04-13 19:28
706 查看
UG NX提供NXOpen类库是支持C#的,只可惜资料太少。很多人使用C#语言开发NX工具,仍然使用以前的UFUN,就是Open API。只不过是通过NXOpen中提供的UF空间封装一下而已。封装是.net常用的技术了。
但是可惜的是,很多函数(如uc1601)并不在这些封装方法之内。也就说,用C#开发,基本上与这些没有封装的函数无缘了。
采用本文的方法就可以解决这些函数不能使用的问题。以uc1601为例。
首先找到函数入口(定位函数)。UG的API被封装在5个dll里,它们是:libufun.dll、libnxopencpp.dll、libugopenint.dll、libnxopenuicpp.dll、libopenpp.dll。只要使用DEPENDS.EXE就可以找到API所在的dll。比如uc1601就在libugopenint.dll中。
然后导入函数。要说明的是,最好事先查API手册,知道这个API的定义,也就说参数和返回。
public class OpenAPI
{
[System.Runtime.InteropServices.DllImport("libugopenint.dll")]
public static extern void uc1601(string msg,int mode);
}
接下来就可以使用了:
public static int Main(string[] args)
{
int retValue = 0;
try
{
theProgram = new Program();
//TODO: Add your application code here
OpenAPI.uc1601("OK", 1);
theProgram.Dispose();
}
catch (NXOpen.NXException ex)
{
// ---- Enter your exception handling code here -----
UI.GetUI().NXMessageBox.Show("Message", NXMessageBox.DialogType.Error, ex.Message);
}
return retValue;
}
当然使用环境还必须是NX要求的方式(Main或者Startup函数作为入口)。
最后说明一下这种方法的不足,就是参数复杂的话比较难使用,不过即将开始走上开发舞台的C#4据说大大的改进了动态语言特性,可能会更好用一些。
但是可惜的是,很多函数(如uc1601)并不在这些封装方法之内。也就说,用C#开发,基本上与这些没有封装的函数无缘了。
采用本文的方法就可以解决这些函数不能使用的问题。以uc1601为例。
首先找到函数入口(定位函数)。UG的API被封装在5个dll里,它们是:libufun.dll、libnxopencpp.dll、libugopenint.dll、libnxopenuicpp.dll、libopenpp.dll。只要使用DEPENDS.EXE就可以找到API所在的dll。比如uc1601就在libugopenint.dll中。
然后导入函数。要说明的是,最好事先查API手册,知道这个API的定义,也就说参数和返回。
public class OpenAPI
{
[System.Runtime.InteropServices.DllImport("libugopenint.dll")]
public static extern void uc1601(string msg,int mode);
}
接下来就可以使用了:
public static int Main(string[] args)
{
int retValue = 0;
try
{
theProgram = new Program();
//TODO: Add your application code here
OpenAPI.uc1601("OK", 1);
theProgram.Dispose();
}
catch (NXOpen.NXException ex)
{
// ---- Enter your exception handling code here -----
UI.GetUI().NXMessageBox.Show("Message", NXMessageBox.DialogType.Error, ex.Message);
}
return retValue;
}
当然使用环境还必须是NX要求的方式(Main或者Startup函数作为入口)。
最后说明一下这种方法的不足,就是参数复杂的话比较难使用,不过即将开始走上开发舞台的C#4据说大大的改进了动态语言特性,可能会更好用一些。
相关文章推荐
- 在C#中直接使用Open API的方法 / A Method of Using Open API in C#
- Breaking parallel loops in .NET C# using the Stop method z
- Win32 api使用中调用GetOpenFileName打开文件对话框无响应的解决方法
- C#直接使用DllImport外部Dll的方法
- 关于struts2 API 中InputConfig 内 methodName 和resultName的使用方法
- 【Android】-- 处理 android 方法总数超过 65536 . the number of method references in a .dex file exceed 64k的两种办法
- C# 中 using 的三种使用方法
- 在C#中使用Nullable类型(给整型赋null值的方法) 值类型null直接插入数据库
- C# 中使用using的三种方法
- My Web Access Code in C#(Basic Post&Get method) / C#访问Web代码(基本Post和Get方法)
- C#中using的使用方法
- C#中using以及实现接口IDisposable的使用方法
- C#中关键字using的三种使用方法
- (.NET) IntelliSense difference of Extension Method name in Statement Completion for VB and C#.
- C#中using的使用方法
- c# using 的使用方法,using别名
- C# 中使用using的三种方法
- 方法数超过64K:The number of method references in a .dex file cannot exceed 64K.
- c# in deep 之使用匿名方法的内联委托操作
- C# Asp.net中的AOP框架 Microsoft.CCI, Mono.Cecil, Typemock Open-AOP API, PostSharp -摘自网络 (可以利用反射 Attribute 进行面向切面编程 可以用在记录整个方法的Log方面)