iCAx开思工具箱

标题: Text String的值用哪个函数取得? [打印本页]

作者: weisongjie    时间: 2007-1-23 14:45
标题: Text String的值用哪个函数取得?
现在我通过UF_UI_select_with_class_dialog获得Type为 Note的object‘s ID
我想通过用某个函数利用object's ID来获得Text String的值,请问用哪个函数?
作者: weisongjie    时间: 2007-1-24 13:56
标题: Text String的值用哪个函数取得?
#include <uf.h>
#include <uf_exit.h>
#include <uf_ui.h>
#include <uf_obj.h>
#include <uf_drf.h>
#include <uf_attr.h>
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
#        include <strstream>
#   include <iostream>
        using std:strstream;
        using std::endl;       
        using std::ends;
        using std::cerr;
#else
#        include <strstream.h>
#   include <iostream.h>
#endif
#include "findstr.h"
#define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))
static int report( char *file, int line, char *call, int irc)
{
  if (irc)
  {
     char    messg[133];
     printf("%s, line %d:  %s\n", file, line, call);
     (UF_get_fail_message(irc, messg)) ?
       printf("    returned a %d\n", irc) :
       printf("    returned error %d:  %s\n", irc, messg);
  }
  return(irc);
}

//----------------------------------------------------------------------------
//  Activation Methods
//----------------------------------------------------------------------------
void do_open_api()
{
        char *cp1="请输入您想要查询的...";
    char ca2[133]="请输入您想要查询的...";
    int *ir3=NULL;
        int rcode;
        ir3 = (int *) calloc( 1, sizeof( int ) ); // locate memory for ir3, reture value will store here
    /*按类选择对话框定义变量*/
        char cue[] = "Select Objects";
    char title[] = "User Title";
    int response, count;
    tag_p_t objects;
    /*按类选择对话框定义变量*/
        char name[30+1] = "";
        /**/
        char title1[UF_ATTR_MAX_STRING_LEN+1] = "CYL1";
        char sval[UF_ATTR_MAX_STRING_LEN+1];
        char message[MAX_LINE_SIZE+1];
        char buffer[UF_UI_MAX_STRING_LEN+1];
        char *object_name1 = "OBJECT1";
        UF_ATTR_value_t  value1;
        tag_t obj1 = NULL_TAG;
    UF_CALL(UF_UI_open_listing_window());
        rcode=uc1600(cp1,ca2,ir3);
        uc1601(ca2,1);
        UF_CALL(UF_UI_select_with_class_dialog(cue,
                                                   title,
                                                                                   UF_UI_SEL_SCOPE_WORK_PART,
                                           NULL,
                                                                                   NULL,
                                                                                   &response,
                                                                                   &count,
                                                                                   &objects));

    UF_CALL(UF_OBJ_cycle_by_name(object_name1,&obj1));
    printf("obj1 = %d\n", obj1);
    UF_CALL(UF_ATTR_read_value(objects[0], title1, UF_ATTR_string, &value1));
    strcpy(message, "Attribute Title : ");
    strcat(message, title1);

        switch ( value1.type ) {
    case UF_ATTR_integer :
      sprintf(buffer, "Integer Attribute : %d\n",
              value1.value.integer);
      UF_UI_write_listing_window(buffer);
      break;
    case UF_ATTR_real    :
      sprintf(buffer, "Floating Point Attribute : %f\n",
                                value1.value.real);
      UF_UI_write_listing_window(buffer);
      break;
    case UF_ATTR_time    :
      sprintf(buffer, "Date & Time Attribute : %d, %d\n",
                value1.value.time[0],
                value1.value.time[1]);
      UF_UI_write_listing_window(buffer);
      break;
    case UF_ATTR_null    :
      UF_UI_write_listing_window("Null Attribute :\n");
      break;
    case UF_ATTR_string  :
      strcpy(sval, value1.value.string);
      sprintf(buffer, "String Attribute : %s\n", sval);
      UF_UI_write_listing_window(buffer);
      UF_free(value1.value.string);
      break;
    case UF_ATTR_reference :
      strcpy(sval,value1.value.reference);
      sprintf(buffer, "Reference Attribute: %s\n", sval);
      UF_UI_write_listing_window(buffer);
      UF_free(value1.value.reference);
      break;
    default :
      UF_UI_write_listing_window("Attribute Does Not Exist!\n");
      break;
  }
    UF_free(objects);
    free( ir3); // free memory
    ir3 = NULL;
}
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
{
    /* Initialize the API environment */
    int errorCode = UF_initialize();

    if ( 0 == errorCode )
    {
        /* TODO: Add your application code here */
        //UF_UI_write_listing_window("Hello World!");
                do_open_api();
                //uc1601("Hello World!",1);
        /* Terminate the API environment */
        errorCode = UF_terminate();
    }

    /* Print out any error messages */
    PrintErrorMessage( errorCode );
}

extern "C" int ufusr_ask_unload( void )
{
    return( UF_UNLOAD_UG_TERMINATE );
}

static void PrintErrorMessage( int errorCode )
{
    if ( 0 != errorCode )
    {
        /* Retrieve the associated error message */
        char message[133];
        UF_get_fail_message( errorCode, message );

        /* Print out the message */
        UF_UI_set_status( message );

        // Construct a buffer to hold the text.
        ostrstream error_message;

        // Initialize the buffer with the required text.
        error_message << endl
                      << "Error:" << endl
                      << message
                      << endl << endl << ends;

            // Write the message to standard error
        cerr << error_message.str();
    }
}
作者: weisongjie    时间: 2007-1-26 17:26
标题: 终于写好了代码
今天终于写好了代码,
看了书,突然发现用GRIP程序获得ID后,利用&DMTEXT命令可以转移取得的字符串的值,
然后利用GRIP调用API程序,将在GRIP里头转移好的字符串通过grargs转递参数,
用VC6处理转递过来的参数,就可以获得所选的字符串的值了,代码都写好了,程序也能运行了,
不过发现:用IDENT命令突然发现选择的对象的数目不能超过1000个,?
这时为什么?有点郁闷~~




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