|
马上注册登录,享用更多网站功能!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
一直不明白加锁解锁的意义,为什么ug就对话框就还能用模态非模态来定义?我下面的问题可能与加锁解锁有关,但我一直不知道如何解决,诚望各位不吝指教,谢谢!
我用一个MFC非模态对话框调用几个带UG入口函数的动态库,得到几个二级对话框,如果用完一个对话框,关掉,起动另一个,没问题。可是当我用了一个对话框,忘记关掉就另起动了一个对话框,没关掉的对话框就被隐藏起来(应该没关掉)后面的对话框就不能正常运行了,为什么呢?我用的部分代码如下:
1。这是二级对话框的动态库入口函数(这是其一,其它类似)://#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;
UF_UI_lock_ug_access(UF_UI_FROM_CUSTOM);//加锁
if ( ( error_code = UF_STYLER_create_dialog ( "h.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_UI_unlock_ug_access(UF_UI_FROM_CUSTOM);//解锁
// UF_terminate();
return;
}
2。这是一级对话框调用代码:
char file_name[]= "../h_.dll" ;
FreeLibrary(hpart);
HINSTANCE hpart=NULL;
typedef void (WINAPI * LIBDLL)();
hpart = :oadLibrary (file_name);
LIBDLL lpproc;
lpproc = (LIBDLL)GetProcAddress (hpart,"ufusr");
if(lpproc!=(LIBDLL)NULL)
{
(*lpproc)();
}} |
|