AllocConsole() NX二次开发使用控制台输出过程
转载,实际上使用 startup 入口函数也可以实现,这里参考下吧!
在UG安装目录UGOPEN文件夹下,有不少范例代码,这些代码大部分使用内部模式,而dll执行过程中是没有控制台的,那么应该如何做呢?
我们可以调用Windows API函数来自己申请一个控制台(就像DOS窗口一样),然后重定向输入输出,就可以用printf函数向控制台输出信息了,范例代码如下:
/*****************************************************************************
ufd_ugopen_console.c
本文件将演示如何z在 UG/Open API 开发中在采取内部模式时,调出一个可用的控制台。
环境:
VS2008编译,在NX 4.0/NX 6.0上测试通过。
历史:
日期 作者 备注
2010-11-02 zale_lzj 整理创建
*****************************************************************************/
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <uf.h>
#include <uf_defs.h>
#include <uf_exit.h>
#include <uf_part.h>
#include <uf_ui.h>
#pragma comment(lib, "libufun.lib")
#pragma comment(lib, "libugopenint.lib")
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
static int report_error( char *file, int line, char *call, int irc)
{
if (irc)
{
char err, messg;
logical response;
UF_UI_is_listing_window_open(&response);
if (!response)
UF_UI_open_listing_window();
UF_get_fail_message(irc, err);
sprintf_s(messg, 300, "\n%s\nerror %d at line %d in %s\n%s",
err, irc, line, file, call);
UF_UI_write_listing_window(messg);
UF_UI_write_listing_window("\n");
}
return(irc);
}
static void do_it(void)
{
char buffer;
int num;
AllocConsole(); // 申请控制台
freopen("CONOUT$", "w+t", stdout);// 重定向输出
freopen("CONIN$", "r+t", stdin); // 重定向输入
printf("%s\n", "Hello World!");
printf("请输入正整数: ");
scanf("%d", &num);
sprintf(buffer, "刚才所输入的数字为:%d", num);
printf("%s\n", buffer);
system("pause"); // 暂停命令
FreeConsole();// 释放控制台
}
void ufusr(char *param, int *retcode, int paramLen)
{
if (UF_CALL(UF_initialize())) return;
if (UF_PART_ask_display_part() != NULL_TAG)
do_it();
else
uc1601("No active part", 1);
UF_terminate();
}
int ufusr_ask_unload(void)
{
return (UF_UNLOAD_IMMEDIATELY);
}
void ufusr_cleanup (void)
{
return;
}
页:
[1]