首页 > 编程语言 >Win32 C++代码快速验证模板

Win32 C++代码快速验证模板

时间:2024-09-04 23:14:20浏览次数:6  
标签:hModule void C++ DLL Win32 LibraryHandler lpwszFormat include 模板

DLL模板

#include <windows.h>

#include <algorithm>
#include <array>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <thread>
#include <unordered_map>
#include <unordered_set>
#include <vector>

using namespace std;

#pragma warning(disable : 4996)

#define LOG(_text, ...) PrintDebugString(L"[demo]" _text L"\r\n", __VA_ARGS__)

void PrintDebugString(LPCWSTR lpwszFormat, ...);

namespace {
/*
 * 0 ProcessAttach NoCall
 * 1 ProcessAttach Called
 */
LONG volatile g_iDllMainProcessAttachFlag = 0;
}  // namespace

extern "C" __declspec(dllexport) void ExportedFunction() {}

void PrintDebugString(LPCWSTR lpwszFormat, ...) {
  va_list args;
  va_start(args, lpwszFormat);

  WCHAR wszBuffer[4096] = {L"FcDebug:"};
  if (_vswprintf(wszBuffer + wcslen(wszBuffer), lpwszFormat, args) < 0) {
    OutputDebugStringW(L"FcDebug: Input String is INVALID !!!");
  }

  va_end(args);
  OutputDebugStringW(wszBuffer);
}

void LibraryHandler_ProcAttach(HANDLE hModule) { LOG("Attach Begin!!"); }

void LibraryHandler_ProcDetach(HANDLE hModule) { LOG("Detach Begin!!"); }

BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpvReserved) {
  // DisableThreadLibraryCalls(hModule);

  switch (dwReason) {
    case DLL_PROCESS_ATTACH: {
      if (0 == InterlockedCompareExchange(&g_iDllMainProcessAttachFlag, 1, 0)) {
        auto threadObj = std::thread(
            [hModule]() -> void { LibraryHandler_ProcAttach(hModule); });
        threadObj.detach();
      }
      break;
    }
    case DLL_PROCESS_DETACH: {
      LibraryHandler_ProcDetach(hModule);
      break;
    }
    case DLL_THREAD_ATTACH:
      break;
    case DLL_THREAD_DETACH:
      break;
  }

  return TRUE;
}

标签:hModule,void,C++,DLL,Win32,LibraryHandler,lpwszFormat,include,模板
From: https://www.cnblogs.com/PeterZ1997/p/18397497

相关文章

  • 《OpenCV计算机视觉》—— 模板匹配
    文章目录一、模板匹配简单介绍二、三个主要函数的介绍1.执行模板匹配函数-cv2.matchTemplate()2.查找最佳匹配函数-cv2.minMaxLoc()3.在原图上绘制匹配区域函数-cv2.rectangle()三、代码实现一、模板匹配简单介绍在Python中,模板匹配是一种在图像中查找与给定模板最......
  • 6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)
    目录一.堆(Heap)的基本介绍二.堆的常用操作(以小根堆为例)三.实现代码3.1堆结构定义3.2向下调整算法*3.3初始化堆*3.4销毁堆3.4向上调整算法* 3.5插入数据3.6删除数据3.7返回堆顶数据四.下篇内容1.堆排序2.TopK问题一.堆(Heap)的基本介绍    ......
  • 面向对象程序设计之链表 list 的简析(C++)
    简介:链表是一个双向的结构,与string与vector不同的是他不支持[]访问,因为链表是由一个节点一个节点连接而成的,并不连续。我们可以在常数量级内对于链表进行插入与删除数据1.构造函数我们在cplusplus.com中可以查到链表总共有四种构造的方式:1.无参构造(默认构造);2.使用n个va......
  • 深入了解链表 list 之的模拟实现 list (C++)
    1.基本框架关于链表我们知道其是一个双向循环结构,并且由许多节点组成,各个节点之间内存空间不一定连续,每个节点均有前驱指针与后继指针,下面我们使用类模版来实现一个适用于存储大部分数据类型的链表,由下面代码我们可以看到一些基础框架与很简单的函数size返回长度与empty判断......
  • vscode launch.json 模板备忘
    {//UseIntelliSensetolearnaboutpossibleattributes.//Hovertoviewdescriptionsofexistingattributes.//Formoreinformation,visit:https://go.microsoft.com/fwlink/?linkid=830387"version":"0.2.0",&quo......
  • C++机试——查找组成一个偶数最近的两个素数
    题目描述任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。数据范围:输入的数据满足 4≤n≤1000 4≤n≤1000 输入描述:输入一个大于2的偶数输出描述:从小到大输出两个素数思路      ......
  • C++语言基础--代码框架
    引入    工欲善其事,必先利其器。我们在编写C++代码之前,一定要了解到C++的代码框架。代码框架可以说是我们所有的C++代码都一定具备的。本章将详细解析C++的代码框架。代码框架#include<cstdio>#include<iostream>usingnamespacestd;intmain(){return......
  • C++:异常
    文章目录什么是异常?异常: 报错:一、异常的处理方式1.抛出异常2.捕获异常二、标准异常三、自定义异常什么是异常?异常: 异常这个概念可能会有一些陌生,但是str.at(i)我们并不陌生,当i值越界时就会产生一个异常语句:terminatecalledafterthrowinganinstanceof......
  • windows C++ 并行编程-并发和UWP(三)
    控制执行线程Windows运行时使用COM线程模型。在此模型中,根据对象处理其同步的方式,对象被托管在不同的单元中。线程安全对象托管在多线程单元(MTA)中。必须通过单个线程访问的对象托管在单线程单元(STA)中。在具有UI的应用程序中,ASTA(应用程序STA)线程负责发送窗......
  • windows C++ 并行编程-并发和UWP(一)
    本文介绍当在通用Windows运行时(UWP)应用中使用任务类生成基于Windows线程池的异步操作时要谨记的一些要点。异步编程的使用是Windows运行时应用模型中的关键组成部分,因为它能使应用保持对用户输入的响应。可以启动长期运行的任务,而不必阻止UI线程,并且可以在以后接......