在GUI中输出信息到CRT(控制台)

微软连接http://support.microsoft.com/kb/105305

 

在dll中想输出信息,并显示在控制台的dos窗口中,发现printf等已无法使用,GUI程序中不能直接输出了,查阅资料后解决方法如下:

 

void _declspec(dllexport) PrintStr(char* p) { //创建控制台 AllocConsole(); //打开用于输出的句柄,这里用STD_OUTPUT_HANDLE,表示输出句柄,_O_TEXT表示文字方式 int fd = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT); //把流与一个文件句柄相接 FILE* f = _fdopen(fd,"w"); //将指针p中的内容写入到f,以便输出 fprintf(f,"%s",p); //输出指针指向f,stdout:输出,stdin:输入 *stdout = *f; //删除缓冲以便输出将立即可见 setvbuf( stdout, NULL, _IONBF, 0 ); }

PrintStr是一个导出函数,在控制台上显示参数p的内容,我们在Delphi中对其进行调用

procedure PrintStr(s:PChar);cdecl;external 'Etestdll.dll'; procedure TForm1.Button1Click(Sender: TObject); begin PrintStr('中华人民共和国'); end;

输出结果

你可能感兴趣的:(File,dos,null,dll,Delphi,output)