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] << " ";
    }

}


登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...