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据说大大的改进了动态语言特性,可能会更好用一些。