Перейти к публикации

dialog boxes


bazelboday

Рекомендованные сообщения

здравствуйте, есть ли в NX Open C API функция создающее диалоговое окно по типа BrowseForFolder ? или я плохо искал в справочнике или ее там нет

Ссылка на сообщение
Поделиться на других сайтах


Кароче говоря сделал нужный интерфейс на Win 32 API

Описание проблемы:

1) есть программа под NX,в ней есть интерфейс Open API при помощи ее библиотек 

2) есть интерфейс Open API на win 32

необходимо заменить в этой программе заменить  диалоговое окно на интерфейс на Win API

 

 

вызываю в теле программы функцию WinMain и получаю следующую ошибку 

Error 1091 error C2275: 'HINSTANCE' : illegal use of this type as an expression

 

собственно на картинках показано что хочу на что поменять.

post-42282-0-66308700-1396962190_thumb.jpg

post-42282-0-26379400-1396962195_thumb.jpg

Ссылка на сообщение
Поделиться на других сайтах

есть проект с рабочим интерфейсом, мне надо сделать так чтобы данное окно интерфейса вызывалось из функции внутри другого проекта, кто-нибудь может мне объяснить пожалуйста как это сделать?

Ссылка на сообщение
Поделиться на других сайтах

1) скопировать код из одного проекта в другой

2) проект с рабочим интерфейсом скомпилировать в dll, и подключить её во втором проекте

 

первое легче и логичнее

Ссылка на сообщение
Поделиться на других сайтах

я конечно пробовал первый вариант, иначе не спрашивал бы на форуме). дело в том что окно не вызывается при работе программы

Ссылка на сообщение
Поделиться на других сайтах

народ, вот рабочий проект, попробуйте вызвать это окно из своих рабочих уже прог пожалуйста, у меня не вызывается окно хоть ты тресни


working BrowseForFolder.rar

Ссылка на сообщение
Поделиться на других сайтах

просто для проверки добавил кнопку на панель NX по нажатии на которую окно также не вызывается, вот простой листинг.

это автоматически генерируемый код, просто в него добавил рабочее описание окна, и в самом конце внутри callback функции добавил вызов окна функцией dialogbox

// buttonNX.cpp : Defines the entry point for the DLL application.
//


#include "stdafx.h"
#include<windows.h>
#include<windowsx.h>
#include<commctrl.h>
#include<shlobj.h>


#include <D:\Tresh\buttonNX\buttonNX\resource.h>




/*=============================================================================
   WARNING!!  This file is overwritten by the UIStyler each time the Styler 
   file is saved.
  
  
        Filename:  litter_template.c
  
        This file was generated by the NX User Interface Styler
        Created by: i.netskin
        Version: NX 7.5
              Date: 04-15-2014
              Time: 10:32
  
   This template file is overwritten each time the UIStyler dialog is
   saved.  Any modifications to this file will be lost.
==============================================================================*/
 


/*==============================================================================
   Purpose:  This TEMPLATE file contains C source and static structures to      
   guide you in the construction of your NX Open application dialog.            
   The generation of your dialog file (.dlg extension) is the first step towards
   dialog construction within Unigraphics.  You must now create a UGOpen        
   application that utilizes this file (.dlg).                                  
                                                                                
   The information in this file provides you with the following:                
                                                                                
   1.  Help on the use of the functions, UF_MB_add_styler_actions and           
       UF_STYLER_create_dialog in your NX Open application.  These functions    
       will load and display your UIStyler dialog in Unigraphics.               
                                                                                
       An example of the function, UF_MB_add_styler_actions to associate your   
       dialog to the menubar is shown below (Search on Example 1).              
                                                                                
       An example of a invoking a dialog from a callback utilizing              
       UF_STYLER_create_dialog is also shown below (Search for Example 2).      
                                                                                
       An example of a user exit utilizing UF_STYLER_create_dialog is also      
       shown below (Search for Example 3).                                      
                                                                                
   2.  The callback structure: --- CHANGE_cbs ---               
       This structure is VERY important if you have callbacks associated with   
       your dialog.  It correlates the dialog items in your dialog with the     
       callback functions you must supply.  You should not modify this          
       structure since it MUST match up to the information stored in your       
       dialog file (.dlg).  Any attempt to do so will cause an error while      
       constructing your dialog.   If you wish to modify the association of     
       your callbacks to your dialog, please reload your dialog file (.dlg) into
       the UIStyler and regenerate your files.                                  
       You do not need to be concerned about this structure, simply pass it as  
       an argument to the function, UF_STYLER_create_dialog along with your     
       dialog file (.dlg).
       
       Example 1 displays the actual call you may make for this particular      
       dialog.                                                                  
                                                                                
   3.  The empty callback functions (stubs) associated with your dialog items   
       have also been placed in this file.  These empty functions have been     
       created simply to start you along with your coding requirements.         
       The function name, argument list and possible return values have already 
       been provided for you.                                                   
                                                                                
NOTE:  Each callback must be wrappered with the functions UF_initialize()       
       and UF_terminate().                                                      
                                                                                
==============================================================================*/



/* These include files are needed for the following template code.            */
#include <stdio.h> 
#include <uf.h>
#include <uf_defs.h>
#include <uf_exit.h>
#include <uf_ui.h>
#include <uf_styler.h>
#include <uf_mb.h> 
#include <D:\litter\litter.h>
HWND hdialog;
HINSTANCE ghInstance;
HWND edit;

TCHAR FolderName[MAX_PATH];
TCHAR c[MAX_PATH];

BOOL t;



void SetFont(HWND hwnd,LPTSTR FontName,int FontSize)
{
	
	HFONT hf;
	LOGFONT lf={0};
	HDC hdc=GetDC(hwnd);
	
	GetObject(GetWindowFont(hwnd),sizeof(lf),&lf);
	lf.lfWeight = FW_REGULAR;
	lf.lfHeight = (LONG)FontSize;
	lstrcpy( lf.lfFaceName, FontName );
	hf=CreateFontIndirect(&lf);
	SetBkMode(hdc,OPAQUE);
	SendMessage(hwnd,WM_SETFONT,(WPARAM)hf,TRUE);
	ReleaseDC(hwnd,hdc);
   
}


int __stdcall BrowseCallbackProc(HWND  hwnd,UINT  uMsg,LPARAM  lParam,LPARAM  lpData)
{


	if(uMsg==BFFM_INITIALIZED)
	{
		
		RECT ListViewRect,Dialog;
	
		edit=CreateWindowEx(0,"EDIT","",WS_CHILD|WS_VISIBLE|WS_BORDER|ES_AUTOHSCROLL,0,100,100,50,hwnd,0,ghInstance,NULL);
		HWND caption=CreateWindowEx(0,"STATIC","You have selected the folder :",WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN,0,100,100,50,hwnd,0,ghInstance,NULL);
		HWND ListView=FindWindowEx(hwnd,NULL,"SysTreeView32",NULL);

		
		GetWindowRect(hwnd,&Dialog);
		GetWindowRect(ListView,&ListViewRect);

		
		SetWindowPos(ListView,0,(ListViewRect.left-Dialog.left) ,(ListViewRect.top-Dialog.top )-20,290,170,0);
	
		SetWindowPos(edit,HWND_BOTTOM,(ListViewRect.left-Dialog.left),(ListViewRect.top-Dialog.top )+170,290,18,SWP_SHOWWINDOW);
		SetWindowPos(caption,HWND_BOTTOM,(ListViewRect.left-Dialog.left),(ListViewRect.top-Dialog.top )+155,290,14,SWP_SHOWWINDOW);
        



	
		SetFont(caption,"MS Sans Serif",12);
		SetFont(edit,"MS Sans Serif",12);
		
	}

	
	if  (uMsg==BFFM_SELCHANGED)
	{
		t = SHGetPathFromIDList((ITEMIDLIST*)lParam, c);
            
		
		SetWindowText(edit,c);
		
    }
	
	return 0;
}


BOOL CALLBACK MainDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	if(message==WM_QUIT||message==WM_CLOSE)
		PostQuitMessage(0);
		

	if(message==WM_INITDIALOG)
	{
		
		hdialog=hDlg;
		
		RECT rc;

		GetWindowRect(hDlg,&rc); 
		int w=rc.right-rc.left, h=rc.bottom-rc.top;
		int cx=GetSystemMetrics(SM_CXSCREEN)/2, cy=GetSystemMetrics(SM_CYSCREEN)/2;
		MoveWindow(hDlg,cx-w/2,cy-h/2,w,h,FALSE);
		SendMessage(hDlg, WM_COMMAND, IDOK, 0);
      
	}

	if(message==WM_COMMAND)
	{
		if((LOWORD(wParam))==IDOK)
		{
			
			TCHAR dname[MAX_PATH];
			IMalloc *imalloc; SHGetMalloc(&imalloc);
			BROWSEINFO bi; ZeroMemory(&bi,sizeof(bi));
			   
			bi.hwndOwner=hDlg;
			bi.pszDisplayName=dname;
			bi.lpszTitle = TEXT("Choose Directory");
			   
			#define BIF_NONEWFOLDERBUTTON  0x0200
			   
			bi.ulFlags = BIF_NONEWFOLDERBUTTON|BIF_RETURNONLYFSDIRS;
			bi.lpfn = BrowseCallbackProc;
			ITEMIDLIST *pidl = SHBrowseForFolder(&bi);
               
			   
			if (pidl!=NULL)
				MessageBox(hDlg,c,"Selected Folder",0);
			
			
			
			SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
	
			
			

			imalloc->Free(pidl);
			imalloc->Release();
			

		}

		if((LOWORD(wParam))==IDCANCEL)
		{
			
			PostQuitMessage(0);
			
			EndDialog(hDlg,0);
		}
	}
			
	return 0;

}

/* The following definition defines the number of callback entries */
/* in the callback structure:                                      */
/* UF_STYLER_callback_info_t CHANGE_cbs */
#define CHANGE_CB_COUNT ( 2 + 1 ) /* Add 1 for the terminator */
 
/*--------------------------------------------------------------------------
The following structure defines the callback entries used by the       
styler file.  This structure MUST be passed into the user function,    
UF_STYLER_create_dialog along with CHANGE_CB_COUNT.                       
--------------------------------------------------------------------------*/
static UF_STYLER_callback_info_t CHANGE_cbs[CHANGE_CB_COUNT] = 
{
 {UF_STYLER_DIALOG_INDEX, UF_STYLER_APPLY_CB        , 0, CHANGE_apply_cb},
 {CHANGE_IDENTIFIKATOR  , UF_STYLER_ACTIVATE_CB     , 0, CHANGE_KNOPKU_NAJALI},
 {UF_STYLER_NULL_OBJECT, UF_STYLER_NO_CB, 0, 0 }
};



/*--------------------------------------------------------------------------
UF_MB_styler_actions_t contains 4 fields.  These are defined as follows:
 
Field 1 : the name of your dialog that you wish to display.
Field 2 : any client data you wish to pass to your callbacks.
Field 3 : your callback structure.
Field 4 : flag to inform menubar of your dialog location.  This flag MUST  
          match the resource set in your dialog!  Do NOT ASSUME that changing 
          this field will update the location of your dialog.  Please use the 
          UIStyler to indicate the position of your dialog.
--------------------------------------------------------------------------*/
static UF_MB_styler_actions_t actions[] = {
    { "litter.dlg",  NULL,   CHANGE_cbs,  UF_MB_STYLER_IS_NOT_TOP },
    { NULL,  NULL,  NULL,  0 } /* This is a NULL terminated list */
};








/*---------------- MENUBAR HOOKUP HELP Example -------------------
To launch this dialog from a Unigraphics menubar, you must follow 
the steps below.
1)  Add the following lines to your MenuScript file in order to 
    associate a menu bar button with your dialog.  In this     
    example, a cascade menu will be created and will be        
    located just before the Help button on the main menubar.   
    The button, LITTER_BTN is set up to launch your dialog and 
    will be positioned as the first button on your pulldown menu.
    If you wish to add the button to an existing cascade, simply 
    add the 3 lines between MENU LAUNCH_CASCADE and END_OF_MENU  
    to your menuscript file.  
    
    The MenuScript file requires an extension of ".men".
    Make sure that you add the extension to the file and place  
    the file in your startup directory:
      $UGII_USER_DIR/startup or 
      $UGII_SITE_DIR/startup or 
      $UGII_VENDOR_DIR/startup directory


    Move the contents between the dashed lines to your Menuscript file.
!   ----------------------------------------------------------------
    VERSION 120

    EDIT UG_GATEWAY_MAIN_MENUBAR

    BEFORE UG_HELP
      CASCADE_BUTTON UISTYLER_DLG_CASCADE_BTN
      LABEL Dialog Launcher
    END_OF_BEFORE
 
    MENU UISTYLER_DLG_CASCADE_BTN
      BUTTON LITTER_BTN
      LABEL Display litter dialog
      ACTIONS litter.dlg
    END_OF_MENU
!   ---------------------------------------------------------------


2) Issue a call to the function, UF_MB_add_styler_actions from the ufsta
   user exit as shown below.  To use this call, remove the conditional 
   definitions:  #ifdef MENUBAR_COMMENTED_OUT 
                 #endif MENUBAR_COMMENTED_OUT 
   
   The static structure, actions, will allow you to associate ALL of your
   dialogs and callback functions to the  menubar at once.  For example, if you 
   wish to have 10 dialogs associated to 10 different buttons on the menubar,
   you may enter each dialog and callback list into the actions structure. Make
   sure that you have created a corresponding button in your MenuScript file.
   
   You may also have separate shared libraries, each with a ufsta user exit
   for each individual dialog.


3) Place your compiled and linked ufsta user function in 
   $UGII_USER_DIR/startup or   
   $UGII_SITE_DIR/startup or 
   $UGII_VENDOR_DIR/startup directory.     
 
   NOTE:  The user function must contain the proper extension .so, .sl or .dll 
   to make ensure that it is recognized by the MenuScript.  If it does not
   have the proper extension, it will NOT be recognized by MenuScript.    


   The action name you have provided in your MenuScript must correspond to
   to the dialog name provided in the action structure.  This MUST match inorder
   to bind your dlg file to your MenuScript button.                            


4) Copy your UIStyler dialog file to the proper directory.
   All dialog files (.dlg) must be located in 
      $UGII_USER_DIR/application or 
      $UGII_SITE_DIR/application or 
      $UGII_VENDOR_DIR/application directory




------------------------------------------------------------*/
//#ifdef MENUBAR_COMMENTED_OUT
extern void ufsta (char *param, int *retcode, int rlen)
{
    int  error_code;
 
    if ( (UF_initialize()) != 0) 
          return;
                                                 
    if ( (error_code = UF_MB_add_styler_actions ( actions ) ) != 0 )
    {
          char fail_message[133];
          
          UF_get_fail_message(error_code, fail_message);
          printf ( "%s\n", fail_message ); 
    }
                                                 
    UF_terminate();                             
    return;
}
//#endif /*MENUBAR_COMMENTED_OUT*/





/*-------DIALOG CREATION FROM A CALLBACK HELP Example ----------
If you wish to have this dialog displayed from the callback of 
another UIStyler dialog, you should:                           

1) Make sure that the callback of your UIStyler dialog is 
   designated as a dialog building callback.              
2) Remove the conditional definitions:
   #ifdef DISPLAY_FROM_CALLBACK 
   #endif DISPLAY_FROM_CALLBACK
3) Your callback should issue a call to this function.
4) You should also add the funcitonal prototype to your header file 
   (litter.h) and ensure that the file is properly included.

All dialog files must be located in 
      $UGII_USER_DIR/application or 
      $UGII_SITE_DIR/application or 
      $UGII_VENDOR_DIR/application directory
--------------------------------------------------------------*/


//#ifdef DISPLAY_FROM_CALLBACK
extern int myFuntion( int *response )
{
    int  error_code = 0;
 
    if ( ( error_code = UF_initialize() ) != 0 ) 
           return (0) ;

    if ( ( error_code = UF_STYLER_create_dialog ( "litter.dlg",
           CHANGE_cbs,      /* Callbacks from dialog */
           CHANGE_CB_COUNT, /* number of callbacks*/
           NULL,        /* This is your client data */
           response ) ) != 0 )
    {
          char fail_message[133];

          /* Get the user function fail message based on the fail code.*/
          UF_get_fail_message(error_code, fail_message);
          UF_UI_set_status (fail_message);
          printf ( "%s\n", fail_message ); 
    }


    UF_terminate();                             
    return (error_code);
}
//#endif /* DISPLAY_FROM_CALLBACK */ 




/*-------DIALOG CREATION FROM A USER EXIT HELP Example --------
To create this dialog from a user exit, you must invoke a     
call to the NX Open API, UF_STYLER_create_dialog.  An example 
is shown below.                                               

All dialog files must be located in 
      $UGII_USER_DIR/application or 
      $UGII_SITE_DIR/application or 
      $UGII_VENDOR_DIR/application directory

1) Remove the conditional definitions:
   #ifdef DISPLAY_FROM_USER_EXIT 
   #endif DISPLAY_FROM_USER_EXIT 
2) Add a user exit to the function name below, for example, ufusr.
3) Consider how your shared library will be unloaded.  Take a look
   at the generated function ufusr_ask_unload.
--------------------------------------------------------------*/

//#ifdef DISPLAY_FROM_USER_EXIT
extern void ufusr (char *param, int *retcode, int rlen)
{
    int  response   = 0;
    int  error_code = 0;
 
    if ( ( UF_initialize() ) != 0 ) 
           return;

    if ( ( error_code = UF_STYLER_create_dialog ( "litter.dlg",
           CHANGE_cbs,      /* Callbacks from dialog */
           CHANGE_CB_COUNT, /* number of callbacks*/
           NULL,        /* This is your client data */
           &response ) ) != 0 )
    {
          char fail_message[133];

          /* Get the user function fail message based on the fail code.*/
          UF_get_fail_message(error_code, fail_message);
          UF_UI_set_status (fail_message);
          printf ( "%s\n", fail_message ); 
    }


    UF_terminate();                             
    return;
}




/*--------------------------------------------------------------------------
This function specifies how a shared image is unloaded from memory          
within Unigraphics. This function gives you the capability to unload an     
internal NX Open application or user  exit from Unigraphics.  You can       
specify any one of the three constants as a return value to determine       
the type of unload to perform:  immediately after user function             
execution, via an unload selection dialog, or when Unigraphics terminates   
terminates.  If you choose UF_UNLOAD_SEL_DIALOG, then you have the          
option to unload your image by selecting  File->Utilities->Unload Shared    
Image. 

NOTE:  A program which associates NX Open applications with the menubar     
MUST NOT use this option since it will UNLOAD your NX Open application image
--------
from the menubar.
--------------------------------------------------------------------------*/

extern int ufusr_ask_unload (void)
{
     /* unload immediately after application exits*/
     return ( UF_UNLOAD_IMMEDIATELY );

     /*via the unload selection dialog... */
     /*return ( UF_UNLOAD_SEL_DIALOG );   */
     /*when UG terminates...              */
     /*return ( UF_UNLOAD_UG_TERMINATE ); */
}



/*--------------------------------------------------------------------------
You have the option of coding the cleanup routine to perform any housekeeping
chores that may need to be performed.  If you code the cleanup routine, it is
automatically called by Unigraphics.
--------------------------------------------------------------------------*/
extern void ufusr_cleanup (void)
{
    return;
}
//#endif /* DISPLAY_FROM_USER_EXIT */ 






/*-------------------------------------------------------------------------*/
/*---------------------- UIStyler Callback Functions ----------------------*/
/*-------------------------------------------------------------------------*/

/* -------------------------------------------------------------------------
 * Callback Name: CHANGE_apply_cb
 * This is a callback function associated with an action taken from a
 * UIStyler object. 
 *
 * Input: dialog_id   -   The dialog id indicate which dialog this callback
 *                        is associated with.  The dialog id is a dynamic,
 *                        unique id and should not be stored.  It is
 *                        strictly for the use in the NX Open API:
 *                               UF_STYLER_ask_value(s) 
 *                               UF_STYLER_set_value   
 *        client_data -   Client data is user defined data associated
 *                        with your dialog.  Client data may be bound
 *                        to your dialog with UF_MB_add_styler_actions
 *                        or UF_STYLER_create_dialog.                 
 *        callback_data - This structure pointer contains information
 *                        specific to the UIStyler Object type that  
 *                        invoked this callback and the callback type.
 * -----------------------------------------------------------------------*/
int CHANGE_apply_cb ( int dialog_id,
             void * client_data,
             UF_STYLER_item_value_type_p_t callback_data)
{
     /* Make sure User Function is available. */  
     if ( UF_initialize() != 0) 
          return ( UF_UI_CB_CONTINUE_DIALOG );

     /* ---- Enter your callback code here ----- */

     UF_terminate ();

    /* Callback acknowledged, do not terminate dialog                 */
    /* A return value of UF_UI_CB_EXIT_DIALOG will not be accepted    */
    /* for this callback type.  You must respond to your apply button.*/
    return (UF_UI_CB_CONTINUE_DIALOG); 

}


/* -------------------------------------------------------------------------
 * Callback Name: CHANGE_KNOPKU_NAJALI
 * This is a callback function associated with an action taken from a
 * UIStyler object. 
 *
 * Input: dialog_id   -   The dialog id indicate which dialog this callback
 *                        is associated with.  The dialog id is a dynamic,
 *                        unique id and should not be stored.  It is
 *                        strictly for the use in the NX Open API:
 *                               UF_STYLER_ask_value(s) 
 *                               UF_STYLER_set_value   
 *        client_data -   Client data is user defined data associated
 *                        with your dialog.  Client data may be bound
 *                        to your dialog with UF_MB_add_styler_actions
 *                        or UF_STYLER_create_dialog.                 
 *        callback_data - This structure pointer contains information
 *                        specific to the UIStyler Object type that  
 *                        invoked this callback and the callback type.
 * -----------------------------------------------------------------------*/
int CHANGE_KNOPKU_NAJALI ( int dialog_id,
             void * client_data,
             UF_STYLER_item_value_type_p_t callback_data)
{
     /* Make sure User Function is available. */  
     if ( UF_initialize() != 0) 
          return ( UF_UI_CB_CONTINUE_DIALOG );

     /* ---- Enter your callback code here ----- */
     HINSTANCE hInstance ;
	 
	 DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,MainDlgProc);
         
	 UF_terminate ();

    /* Callback acknowledged, do not terminate dialog */
    return (UF_UI_CB_CONTINUE_DIALOG); 
    
    /* or Callback acknowledged, terminate dialog.    */
    /* return ( UF_UI_CB_EXIT_DIALOG );               */

}

Ссылка на сообщение
Поделиться на других сайтах

1) скопировать код из одного проекта в другой

2) проект с рабочим интерфейсом скомпилировать в dll, и подключить её во втором проекте

 

первое легче и логичнее

можно подробнее на втором пункте пожалуйста

Ссылка на сообщение
Поделиться на других сайтах

1) скопировать код из одного проекта в другой

2) проект с рабочим интерфейсом скомпилировать в dll, и подключить её во втором проекте

 

первое легче и логичнее

typedef int( __cdecl * MY_FUNC_PTR ) ( HINSTANCE ,HINSTANCE ,LPSTR ,int )  ;
     MY_FUNC_PTR functionPointer = NULL;
     int  error_code = 0;
	error_code = UF_load_library("D:\\working BrowseForFolder\\BrowseForFolder\\release\\BrowseForFolder.dll", "WinMain",(UF_load_f_p_t *) & functionPointer ) ;
	
	 
	 HINSTANCE hInstance ;
	 ghInstance=hInstance;
	 HINSTANCE hPrevInstance ;
	 LPSTR lpCmdLine;
	 int nShowCmd ;
     
	 //DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,MainDlgProc);
    if ( error_code )
        reportError ( error_code );
		
     else if ( !functionPointer )
         reportError ( "Failed to get function pointer" );
     else 
         //// call function
        functionPointer(hInstance,hPrevInstance,lpCmdLine,nShowCmd);




нашел как это сделать, разобрался, теперь такая ошибка

error Entry point not found in library

Ссылка на сообщение
Поделиться на других сайтах

Код даже в dll должен быть в каком-либо структурированном формате - объявлены все нужные пространства имён, классы и методы являются публичными, для плюсов может еще и main() обязательна, не знаю.

Ссылка на сообщение
Поделиться на других сайтах

вот готовый проект с интерфейсом который надо вызвать из другого проекта

working_BrowseForFolder1.rar

Изменено пользователем bazelboday
Ссылка на сообщение
Поделиться на других сайтах

передал код внутри проекта с интерфейсом так 

extern "C" __declspec (dllexport) int DialogInvoke ( )
{
   DialogBox(ghInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,MainDlgProc);
   return 0;
}

внутри проекта с NX так делаю

     
typedef int( __cdecl * MY_FUNC_PTR ) ( )  ;
MY_FUNC_PTR functionPointer = NULL;
     int  error_code = 0;
error_code = UF_load_library("d:\\working
BrowseForFolder\\BrowseForFolder\\release\\BrowseForFolder.dll",
"DialogInvoke",(UF_load_f_p_t *) & functionPointer ) ;


    if ( error_code )
        reportError ( error_code );
     else if ( !functionPointer )
         reportError ( "Failed to get function pointer" );
     else

            functionPointer( );

что не так?

Ссылка на сообщение
Поделиться на других сайтах

вот примерный алгоритм:

1. создаем проект. Любой проект, главное, не .dll проект. Это необходимо, чтобы проверить - запускается или нет ваше диалоговое окно в более информативной среде - Visual Studio.

2. Затем вставляем на обработчик кнопки метод вызова диалогового окна

3. Проверяем нажатием кнопки - что у нас будет. Если открывается диалоговое окно, то и в dll всё сработает.

4. Копируем код в .dll проект в необходимое вам место.

Изменено пользователем PostDeveloper
Ссылка на сообщение
Поделиться на других сайтах

вот примерный алгоритм:

1. создаем проект. Любой проект, главное, не .dll проект. Это необходимо, чтобы проверить - запускается или нет ваше диалоговое окно в более информативной среде - Visual Studio.

2. Затем вставляем на обработчик кнопки метод вызова диалогового окна

3. Проверяем нажатием кнопки - что у нас будет. Если открывается диалоговое окно, то и в dll всё сработает.

4. Копируем код в .dll проект в необходимое вам место.

я не понял что вы хотите

Ссылка на сообщение
Поделиться на других сайтах

 

вот примерный алгоритм:

1. создаем проект. Любой проект, главное, не .dll проект. Это необходимо, чтобы проверить - запускается или нет ваше диалоговое окно в более информативной среде - Visual Studio.

2. Затем вставляем на обработчик кнопки метод вызова диалогового окна

3. Проверяем нажатием кнопки - что у нас будет. Если открывается диалоговое окно, то и в dll всё сработает.

4. Копируем код в .dll проект в необходимое вам место.

я не понял что вы хотите

 

прочитав топик, я понял, что при запуске .dll в NX не запускается диалоговое окно. 

В вышеприведённом алгоритме показываю как эффективнее компилировать вызов диалогового окна.

Изменено пользователем PostDeveloper
Ссылка на сообщение
Поделиться на других сайтах

собственно я сделал кнопку на панели NX и на обработчик кнопки(т.е. внтури ее callback функции) вызываю свой dll через UF_load_library. окно не вызывается, ошибок при загрузки dll нету.


товарищи, неужели никто не знает ответа? очень нужно выполнить задание, перерыл интернет, перепробовал все, не вызывается хоть ты тресни

Ссылка на сообщение
Поделиться на других сайтах

А  дескриптор  экземпляра приложения получаете/передаете?

HINSTANCE hInstance = GetModuleHandleA((LPCSTR)"my.dll");

А то в коде просто неопределенная переменная видна...

 

Еще может понадобиться UF_UI_lock_ug_access (UF_UI_FROM_CUSTOM);

чтоб диалог мог запуститься...

Ссылка на сообщение
Поделиться на других сайтах

вот код обработчика кнопки 

typedef int( __cdecl * MY_FUNC_PTR ) ( )  ; 
	 MY_FUNC_PTR functionPointer = NULL;
     int  error_code = 0;
	error_code = UF_load_library("d:\\working BrowseForFolder\\BrowseForFolder\\release\\BrowseForFolder.dll", "DialogInvoke",(UF_load_f_p_t *) & functionPointer ) ;
	
     
	 
    if ( error_code )
        reportError ( error_code );
		
     else if ( !functionPointer )
         reportError ( "Failed to get function pointer" );
     else 
            functionPointer( ); // DialogInvoke

Код Dll

#include<windows.h>
#include<windowsx.h>
#include<commctrl.h>
#include<shlobj.h>

#include "resource.h"

//Handles for the windows
HWND hdialog;
HINSTANCE ghInstance;
HWND edit;
//Folder Name that has been selected
TCHAR FolderName[MAX_PATH];
TCHAR c[MAX_PATH];
//Return value of the SHGetPathFromIDList
BOOL t;



void SetFont(HWND hwnd,LPTSTR FontName,int FontSize)
{
	
	HFONT hf;
	LOGFONT lf={0};
	HDC hdc=GetDC(hwnd);
	
	GetObject(GetWindowFont(hwnd),sizeof(lf),&lf);
	lf.lfWeight = FW_REGULAR;
	lf.lfHeight = (LONG)FontSize;
	lstrcpy( lf.lfFaceName, FontName );
	hf=CreateFontIndirect(&lf);
	SetBkMode(hdc,OPAQUE);
	SendMessage(hwnd,WM_SETFONT,(WPARAM)hf,TRUE);
	ReleaseDC(hwnd,hdc);
   
}


int __stdcall BrowseCallbackProc(HWND  hwnd,UINT  uMsg,LPARAM  lParam,LPARAM  lpData)
{


	if(uMsg==BFFM_INITIALIZED)
	{
		
		RECT ListViewRect,Dialog;
	
		edit=CreateWindowEx(0,"EDIT","",WS_CHILD|WS_VISIBLE|WS_BORDER|ES_AUTOHSCROLL,0,100,100,50,hwnd,0,ghInstance,NULL);
		HWND caption=CreateWindowEx(0,"STATIC","You have selected the folder :",WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN,0,100,100,50,hwnd,0,ghInstance,NULL);
		HWND ListView=FindWindowEx(hwnd,NULL,"SysTreeView32",NULL);

		
		GetWindowRect(hwnd,&Dialog);
		GetWindowRect(ListView,&ListViewRect);

		
		SetWindowPos(ListView,0,(ListViewRect.left-Dialog.left) ,(ListViewRect.top-Dialog.top )-20,290,170,0);
	
		SetWindowPos(edit,HWND_BOTTOM,(ListViewRect.left-Dialog.left),(ListViewRect.top-Dialog.top )+170,290,18,SWP_SHOWWINDOW);
		SetWindowPos(caption,HWND_BOTTOM,(ListViewRect.left-Dialog.left),(ListViewRect.top-Dialog.top )+155,290,14,SWP_SHOWWINDOW);
        



	
		SetFont(caption,"MS Sans Serif",12);
		SetFont(edit,"MS Sans Serif",12);
		
	}

	
	if  (uMsg==BFFM_SELCHANGED)
	{
		t = SHGetPathFromIDList((ITEMIDLIST*)lParam, c);
            
		
		SetWindowText(edit,c);
		
    }
	
	return 0;
}


BOOL CALLBACK MainDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	if(message==WM_QUIT||message==WM_CLOSE)
		PostQuitMessage(0);

	if(message==WM_INITDIALOG)
	{
		
		hdialog=hDlg;
		
		RECT rc;

		GetWindowRect(hDlg,&rc); 
		int w=rc.right-rc.left, h=rc.bottom-rc.top;
		int cx=GetSystemMetrics(SM_CXSCREEN)/2, cy=GetSystemMetrics(SM_CYSCREEN)/2;
		MoveWindow(hDlg,cx-w/2,cy-h/2,w,h,FALSE);
		SendMessage(hDlg, WM_COMMAND, IDOK, 0);
		SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
      
	}

	if(message==WM_COMMAND)
	{
		if((LOWORD(wParam))==IDOK)
		{
			
			TCHAR dname[MAX_PATH];
			IMalloc *imalloc; SHGetMalloc(&imalloc);
			BROWSEINFO bi; ZeroMemory(&bi,sizeof(bi));
			   
			bi.hwndOwner=hDlg;
			bi.pszDisplayName=dname;
			bi.lpszTitle = TEXT("Choose Directory");
			   
			#define BIF_NONEWFOLDERBUTTON  0x0200
			   
			bi.ulFlags = BIF_NONEWFOLDERBUTTON|BIF_RETURNONLYFSDIRS;
			bi.lpfn = BrowseCallbackProc;
			ITEMIDLIST *pidl = SHBrowseForFolder(&bi);
               
			   
			if (pidl!=NULL)
				MessageBox(hDlg,c,"Selected Folder",0);
			
			
			
		//	SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
	
			
			

			imalloc->Free(pidl);
			imalloc->Release();
			

		}

		if((LOWORD(wParam))==IDCANCEL)
		{
			
			PostQuitMessage(0);
			
			EndDialog(hDlg,0);
		}
	}
			
	return 0;

}





extern "C" __declspec (dllexport) int DialogInvoke ( )
{
   DialogBox(ghInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,MainDlgProc);
   return 0;
}



//Main window
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
	//InitCommonControls();
	ghInstance=hInstance;
	//DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,MainDlgProc);
	//DialogInvoke ( ) ;
	return 0;
	
}
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




  • Сообщения

    • Viktor2004
      это усилие зажима пружин. А как при вращении там болтается конус чем померить?
    • gudstartup
      при помощи тестера  например такого это самый простой по простому попытайтесь выдрать оправку ломиком!
    • gudstartup
    • TVM
      Для общего развития интересовался. И на предложение, спроектировать крышечку - там все просто, не ведусь. 
    • Gorich
    • Нанософт разработка
      Одним из эффективных способов осуществления строительного надзора является использование результатов лазерного сканирования с построением 3D-моделей, что дает наиболее полную информацию о строительных объектах с привязкой к пространственным, инфраструктурным и центральным инженерным коммуникациям. Институт «Сибгипробум», активно работающий над совершенствованием мониторинга и созданием цифровых двойников, использует комбинацию технологий «Платформа nanoCAD + ReClouds» как бесшовную инженерную среду для проектирования и для работы с облаками точек. Комплексную поддержку при внедрении программных решений предоставила компания «Бюро САПР» – премьер- и фокус-партнер компании «Нанософт» по направлениям «Конструкции», «Инженерия» и «Землеустройство».   О компании АО «Сибгипробум» – институт, на протяжении 65 лет специализирующийся в области проектирования предприятий лесной и целлюлозно-бумажной промышленности, объектов глубокой химико-механической переработки древесины, а также разрабатывающий проекты экологических и энергетических объектов. В проектной деятельности институт активно использует технологии лазерного сканирования и информационного моделирования. Исходная ситуация ·        Отсутствие возможности оперативного повсеместного контроля строительства на промплощадке. ·        Отсутствие актуальной трехмерной модели объекта, которую в дальнейшем можно было бы сопоставить с облаком точек. ·        Сжатые сроки, которые не позволяли создать трехмерную модель. Задачи цифрового мониторинга ·        Поиск изменений между отчетными периодами. ·        Подсчет объемов монтажа. ·        Поиск пространственно-временных коллизий. Сравнение облака точек в двух отчетных периодах на графике строительства – S-кривой. Красным подсвечено то, что изменено (это было сделано на другой платформе)   Оптимальное технологическое решение можно выбрать в зависимости от степени сложности точечной задачи в рамках цифрового мониторинга. Продемонстрируем это на конкретных примерах. Прикладная задача 1: проверка проектного положения монтируемого оборудования и конструкций. Выбранная технология: Платформа nanoCAD для совмещения 2D-чертежей с облаком точек. Алгоритм работы технологии: загрузка исходного облака точек формата LAS в nanoCAD импортом NPC → создание удобной ПСК для сравнения облака точек в нужном ракурсе → копирование чертежа и совмещение по «точкам доверия» (например, по колоннам здания) → создание сечения → поиск отклонений. Полученный прикладной результат: разрез на определенной отметке показал отклонение по колоннам здания, из-за чего стена построена «криво». Благодаря этим данным авторский надзор перепроверил расчетные значения и скорректировал решения. В результате эту стену пришлось укреплять дополнительными металлоконструкциями. Плюсы и минусы технологии Плюсы: Минусы: ·        не требуется трехмерная модель; ·        простая технология, которую может освоить каждый; ·        низкие требования к аппаратному обеспечению; ·        низкая стоимость контроля проектных решений без выезда на площадку. ·        трудозатратно, если требуется проверить несколько разных разделов в одной точке; ·        проверка происходит в рамках одного сечения; ·        каждый раз в новом месте проверки требуется совмещение чертежа и облака точек.     Поиск отклонений в конструкциях путем совмещения 2D-чертежей с облаком точек в Платформе nanoCAD   Прикладная задача 2: анализ деформации оборудования – цилиндрической печи. Выбранная технология: ReClouds для сравнения облака точек печи с ее 3D-моделью. Алгоритм: загрузка исходного облака точек (в формате LAS) и цилиндра, выполненного в виде 3D-солида, равного диаметру печи → совмещение 3D-моделей → использование команды ReClouds Сравнение → побор опытным путем радиуса отклонения (вылет точки от нормативного положения) → создание градиентного графика отклонений → поиск отклонений. Полученный прикладной результат: выявлены отклонения трубы от нормативного положения: вмятина и провисание. Наглядный способ проинформировать проектировщиков и строителей, на какие участки следует обратить внимание, чтобы принять решения о ремонте, частичной или полной замене. Эффективность использования ReClouds ·        Автоматизация обработки данных 3D-сканирования. ·        Работа в знакомой инженерной среде с интуитивно понятным интерфейсом. ·        Высокая скорость работы. ·        Минимум финансовых и аппаратных ресурсов. ·        Интеграция со специализированными решениями. ·        Гибридность используемых технологий: Платформа nanoCAD и ReClouds позволяют одновременно работать с 3D-моделью, 2D-чертежом и облаком.                                         Анализ деформации цилиндрической печи с помощью ReClouds. Справа красным и зеленым цветом подсвечена сама труба   Отклонения трубы от эталонного 3D-солида: слева видна вмятина, справа – провисание трубы Мнение пользователя Павел Владимирович Коротких, главный специалист – руководитель группы отдела по цифровизации инженерных процессов и данных, АО «Сибгипробум»   «Когда геополитическая ситуация обострилась и были введены санкции, перед нашим институтом, как и перед предприятиями многих других отраслей, встала задача импортозамещения.   Много где возникали сложности, но было очень отрадно знать, что базовое инженерное ПО нам есть чем заменить. Этим ПО стала Платформа nanoCAD, которая оказалась намного большим, чем просто скопированный зарубежный продукт.   Из стандартного функционала хотелось бы отметить, во-первых, Диспетчер чертежа, который позволяет удобно осуществлять менеджмент чертежей; а, во-вторых, базовые операции при работе с облаками точек: импорт/экспорт, настройки визуализации, подрезку, сечения и т.д.   Использование ReClouds – вертикального приложения к Платформе nanoCAD – дало нам расширенные возможности взаимодействовать с облаками точек, при этом оставаясь в единой инженерной среде.   Обнадеживает активное развитие продуктов со стороны разработчика и неуклонно растущее комьюнити пользователей».   О компании «Нанософт» «Нанософт» – российский разработчик инженерного ПО: технологий автоматизированного проектирования (CAD/САПР), информационного моделирования (BIM/ТИМ) и сопровождения объектов промышленного и гражданского строительства (ПГС) на всех этапах жизненного цикла, а также сквозной цифровизации всех процессов в производстве. Миссия компании – формирование условий для массового оснащения российского рынка лицензионными, качественными и доступными отечественными программными продуктами. «Нанософт» помогает своим заказчикам достичь импортонезависимости в области инженерного ПО и нацелена на развитие собственных технологий в фокусе реальных потребностей. Это позволяет гарантированно защитить критически важную ИТ-инфраструктуру, что особенно актуально сейчас, когда западные вендоры уходят с рынка, замораживают поставки ПО и техническую поддержку. Все программные продукты компании включены в Единый реестр российских программ для электронных вычислительных машин и баз данных. Официальный сайт: nanocad.ru.  
    • Raven
      Спасибо всем кто, ответил Проблема была в том что в БД свойство было строковое не массив, хотя в бизнес-моделере свойство с таким же именем было массивом типизированых ссылок.
    • Raven
      Привет. Подскажите почему может не отображаться пункт меню Вид - Применяемость
    • Gorich
      Я вот не совсем понял где и что смотреть...а руководство по эксплуатации от станка ну так сказать такое себе...там какие то совсем основы... нашел там типо какой то общий сброс...это не сможет помочь?)
    • Viktor2004
      а как проверить шпиндель, хорошо ли он держит инструмент? Не снимая шпиндель и не разбирая его
×
×
  • Создать...