通常情况下,动态库很难调试,尤其是要打印输出到控制台上,很多新的开发平台比如VS2010或QT倒是可以打印动态库内容到控制台,但我发现VC6编写的动态还是不可以。使用这个函数,可以将VC6编写的动态库调试信息打印到控制台,即使在Release模式下,也能创建一个控制台窗口用于信息输出。
#include <stdarg.h>
#include <iostream>
int dllPrintf(char *fmt, ...)
{
//不定参数格式化
va_list argptr;
va_start(argptr, fmt);
char buffer[512] = {0};
int cnt = vsprintf(buffer, fmt, argptr);
va_end(argptr);
//创建控制台窗口
static HANDLE gHConsole = INVALID_HANDLE_VALUE;
if (INVALID_HANDLE_VALUE == gHConsole) {
AllocConsole();
gHConsole = GetStdHandle(STD_OUTPUT_HANDLE);
}
//打印到指定的控制台窗口
DWORD dw;
WriteConsole(gHConsole, buffer, strlen(buffer), &dw, NULL);
return(cnt);
}