iCAx开思网

标题: UG二次开发,菜单操作注册无效? [打印本页]

作者: zhangdino    时间: 2005-1-9 19:57
标题: UG二次开发,菜单操作注册无效?
折腾了几天,没有进展,在这里向各位大侠请教:
  
在C#的MyForm里,定义了静态变量
   private static Session theSession;
   private static UFSession theUfSession;
   private static UFMb.Action actionTable;   
Main()函数如下:
   public static void Main()  
   {
   theSession = Session.GetSession();
   theUfSession = UFSession.GetUFSession();
  
   actionTable.action_cb.cb = new UFMb.CallbackT(SAMPLE_APP__action1);
   actionTable.action_name = "SAMPLE_APP__action1";
  
   theUfSession.Mb.AddActions(ref actionTable);
   }
回调函数如下:
   public static UFMb.CbStatus SAMPLE_APP__action1(IntPtr inp1,IntPtr inp2,ref MbActivatedButton button)
   {
   UFMb.CbStatus CbStatus = UFMb.CbStatus.CbContinue;
   theForm = new MyForm();
   theForm.Show();
   return CbStatus;
   }
  
将MEN文件及DLL放到startup下,启动NX3.0之后,点击菜单按钮,弹出错误对话框:没有登记该按钮上的操作。
通过菜单条报告工具查看信息,对应的菜单按钮:
Actions: <actions not registered>
显然没有注册成功。
  
请高人指点,谢谢!
作者: zhangdino    时间: 2005-1-11 08:35
另外,在VC下,如果actionTable是局部变量而不是静态变量,注册也失败?
作者: zhangdino    时间: 2005-1-20 13:42
各位老大,伸手救救我吧!
作者: zhouym71    时间: 2005-1-20 17:21
你是做内部开发还是外部开发?
作者: zhangdino    时间: 2005-1-20 19:07
你好,我是作内部开发,恳请指点,谢谢!
作者: zhouym71    时间: 2005-1-20 20:55
你的DLL的体系结构有点问题
作者: zhouym71    时间: 2005-1-20 20:56
最好用UF的菜单入口函数ufsta来实现菜单操作注册
作者: zhangdino    时间: 2005-1-23 11:55
你说的很有道理,好像就是没有执行到似的,但C#下动态库的入口可以用Main()函数的。
按你的建议,我用ufsta,仍然是不行,真是没有办法。。。。。。
作者: zhebin    时间: 2005-1-24 20:45
这是我在vc里的成功例子,除了下面的代码,其他没有任何变量声明。实现一个菜单调用一个函数。希望对你有所借鉴。对你的代码没有看的太清除。
static UF_MB_cb_status_t Load_Library(
    UF_MB_widget_t             widget,
    UF_MB_data_t               client_data,
    UF_MB_activated_button_p_t call_button )
{  
    DisplayDialog();
    return( UF_MB_CB_CONTINUE);
}
static UF_MB_action_t actionTable[]=
{
  {"Load_Library",Load_Library,NULL},
  {NULL,NULL,NULL}
};
extern void ufsta( char *param, int *returnCode, int rlen )//主函数
{
    int errorCode = UF_initialize();
    if ( 0 == errorCode )
    {
        UF_MB_add_actions(actionTable);
        errorCode = UF_terminate();
    }
}
作者: zzz    时间: 2005-1-24 22:05
新的开发环境不懂,不过Ug里面带的例子吧。
作者: zhangdino    时间: 2005-1-25 08:42
谢谢zhebin
你的例子是成功的!
不过,如果将ufsta改动一下,从编程的角度理解应该是可以完成同样功能的,但结果却是失败,不知是何故?
  
static UF_MB_cb_status_t Load_Library(  
    UF_MB_widget_t widget,  
    UF_MB_data_t client_data,  
    UF_MB_activated_button_p_t call_button )  
{  
    DisplayDialog();  
    return( UF_MB_CB_CONTINUE);  
}  
extern void ufsta( char *param, int *returnCode, int rlen )//主函数  
{  
    int errorCode = UF_initialize();  
    if ( 0 == errorCode )  
    {  
    
     UF_MB_action_t actionTable;//变为局部变量
     actionTable.action_cb.cb=Load_Library;
     actionTable.action_name="Load_Library";
  
      UF_MB_add_actions([$actionTable)]  
  
      errorCode = UF_terminate();  
    }  
}  
  
谢谢zzz版主,UG里面的VC#的例子也有一些,但很失望,没有这方面的例子




欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3