c++生成dll中单线程输出信息到控制台的方法
By
admin
at 2023-08-04 • 0人收藏 • 376人看过
用c++生成标准的dll , dll中有很多个函数, 有些函数里想要输出一些信息给控制台, 这样当其他程序调用这个dll的时候就可以在那个程序的控制台里显示这些信息了.
我发现如果dll中开启了个thread线程, 在这个线程里进行输出信息, 没有问题
hSendThread = (HANDLE)_beginthreadex(NULL, 0, loopInit, NULL, 0, NULL);
那么, 如果想直接在外部函数里直接输出信息, 而不是在thread线程里, 应该怎么办?
// Windows 头文件: #include <windows.h> //在任意第一个调用的函数里加入下面代码 AllocConsole(); //SetConsoleTitle(_T("Title")); FILE* pf; freopen_s(&pf, "CONOUT$", "w", stdout); //以后就可以直接使用了 std::cout << " xiaoxi ";
例如可以加在, dllmain.cpp文件里
// dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "stdafx.h" #include <cstdio> BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: //在任意第一个调用的函数里加入下面代码 AllocConsole(); //SetConsoleTitle(_T("Title")); FILE* pf; freopen_s(&pf, "CONOUT$", "w", stdout); case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }
如果想在控制台输出16进制格式数据, 那么
#include <iostream> #include <iomanip> int main() { unsigned char buf[18] = { 0x00, 0x01, 0x02, 003, 0xff, 0xfe, 0xfd, 0xfc, 0x80, 0x7f, 0x00, 0x00,0x12, 0x34, 0xab, 0xcd, 0xef, 0x01 }; for (int i = 0; i < 18; i++) { std::cout << std::hex << std::setw(2) << std::setfill('0') << (int)buf[i] << " "; } }
登录后方可回帖