iCAx开思工具箱

标题: 高手讨论 [打印本页]

作者: 刘亮    时间: 2004-8-29 15:58
标题: 高手讨论
我先用UG造好了一个螺栓模型,保存路径:E:\ugpart\bolt.prt。我现在想通过调用UG API函数把它直接显示在UG图形窗口中,是不是用UF_UI_open_part()函数,我怎么调不出来。
代码如下:
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
{UF_UI_err_t error_handler;
    char* file_name="E:\\ugpart\\bolt.prt";
  
  tag_t part;
  int response;
  UF_PART_load_status_t part_status;
    /* Initialize the API environment */
    int errorCode = UF_initialize();
  
    if ( 0 == errorCode )
    {
        /* TODO: Add your application code here */
  
UF_UI_open_part([$error_handler,file_name,FALSE,&part,&response,&part_status)]
if(part_status.statuses!=NULL)
{
UF_free(part_status.statuses);
  
}
  
if(part_status.file_names!=NULL)
{
UF_free_string_array(part_status.n_parts,part_status.file_names);
}
  
        /* Terminate the API environment */
        errorCode = UF_terminate();
各位兄弟帮我看看,错误出在哪里?帮我改改阿。或者说能不能用ug api函数把它直接显示阿???
  
另外:我还想问一个重要的问题:我想的标准件开发过程是不是可行的???
标准件的开发过程:1、先用ug modeling 模块造好模型。2、通过tools下的expression把它的尺寸参数化。3 、做数据库(我用access)。4、编程为dll文件。
  
我想请您指点:第二步怎么样进行参数化、第二步与第三步怎么挂上钩???
第三步与第四步怎么样挂上钩,Vc++6.0 只提供了MFC App Wizard(exe)能与数据库可以相连,而MFC App Wizard(dll)不能阿,但ug 需要的是dll文件阿???
高手、朋友、兄弟帮帮我阿!!!
作者: 深夜摔键盘    时间: 2004-8-29 17:54
我不是高手
  
你的程序中的filename是字符串,char* file_name="E:\\ugpart\\bolt.prt"; 这样是错的,应该写成char file_name[100]=........;....如不解,最好去翻翻C语言的书吧。
  
第二个问题:怎样参数化,使用表达式,这个没做过。好象UG中的表达式的元素类似于计算机语言中的变量,看看UG的教程吧,应该不难。
  
第三个问题:DLL和EXE没什么区别,完全可以调用数据库接口访问ACCESS的,这个没什么可怀疑的。先查查书,弄清楚DLL的程序结构,它和EXE一样。只不过EXE的执行是由操作系统加载的,而DLL的运行是靠EXE加载。找本《windows程序设计》翻到DLL那一章,看一看。
作者: 刘亮    时间: 2004-8-29 19:23
谢谢:深夜摔键盘 !!!
我一定要把我的名字改成:清早拣键盘,^_^
以后还需多多指导
  
  
作者: 刘亮    时间: 2004-8-29 19:38
我改了,还是有上面那样的错误阿:如下:
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
{UF_UI_err_t error_handler;
    char file_name[100]="E:\ugpart\bolt.prt";
  
  tag_t part;
  int response;
  UF_PART_load_status_t part_status;
  
    /* Initialize the API environment */
    int errorCode = UF_initialize();
  
    if ( 0 == errorCode )
    {
        /* TODO: Add your application code here */
UF_UI_open_part([$error_handler,file_name,FALSE,&part,&response,&part_status)]
if(part_status.statuses!=NULL)
{
UF_free(part_status.statuses);
  
}
  
if(part_status.file_names!=NULL)
{
UF_free_string_array(part_status.n_parts,part_status.file_names);
}
  
        /* Terminate the API environment */
        errorCode = UF_terminate();
    }
  
    /* Print out any error messages */
   &nbsprintErrorMessage( errorCode );
}
  
//----------------------------------------------------------------------------
//  Utilities
//----------------------------------------------------------------------------
  
// Unload Handler
//     This function specifies when to unload your application from Unigraphics.
//     If your application registers a callback (from a MenuScript item or a
//     User Defined Object for example), this function MUST return
//     "UF_UNLOAD_UG_TERMINATE".
extern "C" int ufusr_ask_unload( void )
{
    return( UF_UNLOAD_UG_TERMINATE );
}
  
帮帮我阿,帮我改一下阿.兄弟
作者: 深夜摔键盘    时间: 2004-8-29 21:47
打开已知文件名的PART,还是用UF_PART_open方便。
  
UF_UI_open_part,文档中有example的,它就是FILE |OPEN对话框。
  
#include <stdio.h>
#include <string.h>
#include <uf.h>
#include <uf_part.h>
#include <uf_ui.h>
  
extern void ufusr ( char *param , int *ret_code , int len )
{
  
    int response;
    tag_t part_tag = NULL_TAG;
    char file_name [ MAX_FSPEC_SIZE + 1 ] = "flange.prt";
    const char *message = "part open error";
    logical use_display_file = FALSE;
    UF_PART_load_status_t part_status;
    UF_UI_err_t error_handler;
  
    error_handler.type = UF_UI_open_part_fun;
    error_handler.fun.open = my_error_handler;
        error_handler.fun_data.size = strlen ( message ) + 1;
    error_handler.fun_data.data = message;
    /*
      *************************************************
      call the function, free any allocated memory
      *************************************************
    */
    UF_initialize ( );
    UF_UI_open_part ( &error_handler , file_name ,
&use_display_file ,
                      [$part_tag , &response ,  &part_status )]
    if ( part_status.statuses != NULL )
        {
        UF_free ( part_status.statuses );
        }
    if ( part_status.file_names != NULL )
        {
        UF_free_string_array ( part_status.n_parts ,
part_status.file_names );
        }
    UF_terminate ( );
}
/* ***** local function to be invoked as a callback ***** */
static logical my_error_handler
(
    UF_UI_err_data_p_t     error_fn_data,
    char                  *file_name,
    int                    error,
    UF_PART_load_status_t *error_status,
    logical               *skip_error_disp)
{
     fprintf ( stderr , "my_error_handler called with:\n"
                       "    error_fn_data->size = %d\n"
                       "    error_fn_data->data = %s\n"
                       "    file_name           = %s\n"
                       "    error               = %d\n" ,
                       error_fn_data->size ,
                       ( const char * ) error_fn_data->data ,
                       file_name ,
                       error
            );
    /* **************************************************
       instruct UG to display its error dialog and to
       continue looping within the dialog until a part
       is opened
       **************************************************
    */
    *skip_error_disp = TRUE;
    return TRUE;
}
作者: tari    时间: 2004-8-30 08:42
char file_name[100]="E:\\ugpart\\bolt.prt";
  
  
作者: 刘亮    时间: 2004-8-30 10:40
谢谢各位,我在你们的指导下搞清楚了UF_PART_open与UF_UI_PART_open的区别.谢谢了!!!
  
我做了几个对话框,需要嵌套调用,基本上能实现,但在编译的时候需要把所有的模板文件与头文件一起编译才可以实现嵌套调用,但那样很麻烦,一个对话框出问题要全盘修改,我现在想每个对话框单独编译,前面的兄弟也说过,把被调的对话框的头文件与它的lib文件一起加到调用它的对话框编译就可以.我现在的问题是:被调用对话框编译是根本不产生LIB文件(另外EXP文件也不产生),这到底是什么原因阿????
作者: xiugong    时间: 2007-9-14 13:55
楼主,我现在做的东西和你的一样!
作者: xiugong    时间: 2007-9-14 13:56
楼主,我现在做的东西和你的一样!
我也有好多的问题.
可以和我联系一下吗?呵呵一起探讨一下哦
我的邮箱xiugong@163.com




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3