windows 程序设计「StrProg」 范例分析笔记

用大白话讲透5G SRS天线轮发:为什么你的手机MIMO速度上不去? 本文深入解析5G SRS天线轮发技术如何影响手机MIMO速度,揭示上行参考信号在信道探测中的关键作用。通过对比不同终端天线配置、分析轮发机制工作原理及优化参数,帮助用户理解速度瓶颈成因,并提供终端选择与使用建议,助力提升5G网络体验。 阅读详情

/*--------------------------------------------------------

   STRPROG.C -- Program using STRLIB dynamic-link library

                (c) Charles Petzold, 1998

  --------------------------------------------------------*/

 

#include <windows.h>

#include "strlib.h"

#include "resource.h"

 

typedef struct

{

     HDC hdc ;

     int xText ;

     int yText ;

     int xStart ;

     int yStart ;

     int xIncr ;

     int yIncr ;

     int xMax ;

     int yMax ;

}

CBPARAM ;

 

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

 

TCHAR szAppName [] = TEXT ("StrProg") ;

TCHAR szString [MAX_LENGTH + 1] ;

 

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

                    PSTR szCmdLine, int iCmdShow)

{

     HWND     hwnd ;

     MSG      msg ;

     WNDCLASS wndclass ;

    

     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;

     wndclass.lpfnWndProc   = WndProc ;

     wndclass.cbClsExtra    = 0 ;

     wndclass.cbWndExtra    = 0 ;

     wndclass.hInstance     = hInstance ;

     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;

     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;

     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;

     wndclass.lpszMenuName  = szAppName ;

     wndclass.lpszClassName = szAppName ;

    

     if (!RegisterClass (&wndclass))

     {

          MessageBox (NULL, TEXT ("This program requires Windows NT!"),

                      szAppName, MB_ICONERROR) ;

          return 0 ;

     }

 

     hwnd = CreateWindow (szAppName, TEXT ("DLL Demonstration Program"),

                          WS_OVERLAPPEDWINDOW,

                          CW_USEDEFAULT, CW_USEDEFAULT,

                          CW_USEDEFAULT, CW_USEDEFAULT,

                          NULL, NULL, hInstance, NULL) ;

    

     ShowWindow (hwnd, iCmdShow) ;

     UpdateWindow (hwnd) ;

    

     while (GetMessage (&msg, NULL, 0, 0))

     {

          TranslateMessage (&msg) ;

          DispatchMessage (&msg) ;

     }

     return msg.wParam ;

}

 

BOOL CALLBACK DlgProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

     switch (message)

     {

     case WM_INITDIALOG:

         // 向对话框中的文本输入控件发送EM_LIMITTEXT消息,规定用户最大输入字符数为MAX_LENGTH常量

          SendDlgItemMessage (hDlg, IDC_STRING, EM_LIMITTEXT, MAX_LENGTH, 0) ;

          return TRUE ;

         

     case WM_COMMAND:

          switch (wParam)

          {

          case IDOK:

              // 读取文本输入控件中的字符串到szString全局缓冲区中

               GetDlgItemText (hDlg, IDC_STRING, szString, MAX_LENGTH) ;

               EndDialog (hDlg, TRUE) ;

               return TRUE ;

              

          case IDCANCEL:

               EndDialog (hDlg, FALSE) ;

               return TRUE ;

          }

     }

     return FALSE ;

}

 

BOOL CALLBACK GetStrCallBack (PTSTR pString, CBPARAM * pcbp)

{

    // 输出字符串

     TextOut (pcbp->hdc, pcbp->xText, pcbp->yText,

              pString, lstrlen (pString)) ;

     // 输出y坐标递增一个字符高度,并与窗口可输出最大行比较

     // 如果输出行已到最大行,则执行

     if ((pcbp->yText += pcbp->yIncr) > pcbp->yMax)

     {

         // 使y坐标指向第一行

          pcbp->yText = pcbp->yStart ;

          // x坐标增加一行字符串最大宽度,并与可输出最大列比较

          // 如果输出已到最大行和最大列,则返回FALSE

          if ((pcbp->xText += pcbp->xIncr) > pcbp->xMax)

               return FALSE ;

     }

     return TRUE ;

}

 

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

     static HINSTANCE  hInst ;

     static int        cxChar, cyChar, cxClient, cyClient ;

     static UINT       iDataChangeMsg ;

     CBPARAM           cbparam ;

     HDC               hdc ;

     PAINTSTRUCT       ps ;

     TEXTMETRIC        tm ;

    

     switch (message)

     {

     case WM_CREATE:

          hInst = ((LPCREATESTRUCT) lParam)->hInstance ;

          hdc   = GetDC (hwnd) ;

          GetTextMetrics (hdc, &tm) ;

          cxChar = (int) tm.tmAveCharWidth ;

          cyChar = (int) (tm.tmHeight + tm.tmExternalLeading) ;

          ReleaseDC (hwnd, hdc) ;

 

               // 注册字符串更改消息

          iDataChangeMsg = RegisterWindowMessage (TEXT ("StrProgDataChange")) ;

          return 0 ;

         

     case WM_COMMAND:

          switch (wParam)

          {

          case IDM_ENTER:

              // 创建输入对话框

               if (DialogBox (hInst, TEXT ("EnterDlg"), hwnd, &DlgProc))

               {

                   // 添加用户输入的字符串到共享内存的字符串数组中

                    if (AddString (szString))

                        // 将程序注册的消息发送给所有窗口,用于通知使用共享内存的其它程序

                         PostMessage (HWND_BROADCAST, iDataChangeMsg, 0, 0) ;

                    else

                         MessageBeep (0) ;

               }

               break ;

              

          case IDM_DELETE:

              // 创建删除对话框

               if (DialogBox (hInst, TEXT ("DeleteDlg"), hwnd, &DlgProc))

               {

                    if (DeleteString (szString))

                         PostMessage (HWND_BROADCAST, iDataChangeMsg, 0, 0) ;

                    else

                         MessageBeep (0) ;

               }

               break ;

          }

          return 0 ;

         

     case WM_SIZE:

          cxClient = (int) LOWORD (lParam) ;

          cyClient = (int) HIWORD (lParam) ;

          return 0 ;

              

     case WM_PAINT:

          hdc = BeginPaint (hwnd, &ps) ;

              

          // 初始化输出字符串所需要的数据

          cbparam.hdc   = hdc ;

          cbparam.xText = cbparam.xStart = cxChar ;

          cbparam.yText = cbparam.yStart = cyChar ;

          cbparam.xIncr = cxChar * MAX_LENGTH ;

          cbparam.yIncr = cyChar ;

          cbparam.xMax  = cbparam.xIncr * (1 + cxClient / cbparam.xIncr) ;

          cbparam.yMax  = cyChar * (cyClient / cyChar - 1) ;

              

          // 输出字符串

          GetStrings ((GETSTRCB) GetStrCallBack, (PVOID) &cbparam) ;

             

          EndPaint (hwnd, &ps) ;

          return 0 ;

              

     case WM_DESTROY:

          PostQuitMessage (0) ;

          return 0 ;

 

     default:

         // 广播消息,刷新客户区

          if (message == iDataChangeMsg)

               InvalidateRect (hwnd, NULL, TRUE) ;

          break ;

     }

     return DefWindowProc (hwnd, message, wParam, lParam) ;

}

 

 


 

 

/*------------------------------------------------

   STRLIB.C -- Library module for STRPROG program

               (c) Charles Petzold, 1998

  ------------------------------------------------*/

 

#include <windows.h>

#include <wchar.h>       // for wide-character string functions

#include "strlib.h"

 

// 创建名为shared的共享数据段

#pragma data_seg ("shared")

// 必须对数据初始化,否则编译器将把它们放在普通的未初始化数据段中

int   iTotal = 0 ;

WCHAR szStrings [MAX_STRINGS][MAX_LENGTH + 1] = { '/0' } ;

#pragma data_seg () // 共享数据段结束

 

//#pragma comment(linker,"/SECTION:shared,RWS")

 

int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)

{

     return TRUE ;

}

 

EXPORT BOOL CALLBACK AddStringA (PCSTR pStringIn)

{

     BOOL  bReturn ;

     int   iLength ;

     PWSTR pWideStr ;

 

     /* MultiByteToWideChar 映射一个字符串到一个宽字符(unicode)的字符串

        CP_ACP:ANSI代码页;

        参数二: 一组位标记用以指出是否未转换成预作或宽字符(若组合形式存在)

                是否使用象形文字替代控制字符,以及如何处理无效字符

                缺省动作是转换成预作的形式;

        pStringIn 指向将被转换字符串的字符;

        -1 字符串将被设定为以NULL为结束符的字符串,并且自动计算长度;

        NULL 为指定用于接收的缓冲区;

        0    函数返回缓冲区所必需的宽字符数 */

     iLength = MultiByteToWideChar (CP_ACP, 0, pStringIn, -1, NULL, 0) ;

     // 分配内存,实际转换

     pWideStr = malloc (iLength) ;

     MultiByteToWideChar (CP_ACP, 0, pStringIn, -1, pWideStr, iLength) ;

     // 调用自定义宽字符处理函数做实际处理

     bReturn = AddStringW (pWideStr) ;

     free (pWideStr) ;

 

     return bReturn ;

}

 

EXPORT BOOL CALLBACK AddStringW (PCWSTR pStringIn)

{

     PWSTR pString ;

     int   i, iLength ;

 

     // 依字符串总数做有效性检查

     if (iTotal == MAX_STRINGS - 1)

          return FALSE ;

 

     // 返回宽字符串长度,并做有效性检查

     if ((iLength = wcslen (pStringIn)) == 0)

          return FALSE ;

 

     // 分配字符串内存

     pString = malloc (sizeof (WCHAR) * (1 + iLength)) ;

     // 复制字符串

     wcscpy (pString, pStringIn) ;

     // 将复制的字符串转换为大写

     _wcsupr (pString) ;

 

          // Alphabetize the strings

    

     for (i = iTotal ; i > 0 ; i--)

     {

         // 如果pString 大于或等于 szStrings[i - 1] ,则退出排序

          if (wcscmp (pString, szStrings[i - 1]) >= 0)

               break ;

         // 字符串数组预留位置

          wcscpy (szStrings[i], szStrings[i - 1]) ;

     }

     // 复制新字符串到字符串数组

     wcscpy (szStrings[i], pString) ;

     // 字符串计数加一

     iTotal++ ;

 

     free (pString) ;

     return TRUE ;

}

 

EXPORT BOOL CALLBACK DeleteStringA (PCSTR pStringIn)

{

     BOOL  bReturn ;

     int   iLength ;

     PWSTR pWideStr ;

 

     // 和添加函数一样,转换字符串为宽字符串,并使用宽字符串处理函数来实作

     iLength = MultiByteToWideChar (CP_ACP, 0, pStringIn, -1, NULL, 0) ;

     pWideStr = malloc (iLength) ;

     MultiByteToWideChar (CP_ACP, 0, pStringIn, -1, pWideStr, iLength) ;

     bReturn = DeleteStringW (pWideStr) ;

     free (pWideStr) ;

 

     return bReturn ;

}

 

EXPORT BOOL CALLBACK DeleteStringW (PCWSTR pStringIn)

{

     int i, j ;

    

     // 判断是否输入字符串

     if (0 == wcslen (pStringIn))

          return FALSE ;

    

     for (i = 0 ; i < iTotal ; i++)

     {

         // 如果 szStrings[i] 等于 pStringIn ,_wcsicmp的返回值为0

          if (_wcsicmp (szStrings[i], pStringIn) == 0)

               break ;

     }

 

     // 如果因为循环判断公式错误而退出循环,表明给定的字符串不在列表中

     if (i == iTotal)

          return FALSE ;

 

     // 否者从找到的字符串开始,向下重排

     for (j = i ; j < iTotal ; j++)

          wcscpy (szStrings[j], szStrings[j + 1]) ;

    

     // 删除之前的字符串数组尾,调整字符串计数

     szStrings[iTotal--][0] = '/0' ;

     return TRUE ;

}

 

EXPORT int CALLBACK GetStringsA (GETSTRCB pfnGetStrCallBack, PVOID pParam)

{

     BOOL bReturn ;

     int  i, iLength ;

     PSTR pAnsiStr ;

 

     for (i = 0 ; i < iTotal ; i++)

     {

         // 转换成宽字符串

          iLength = WideCharToMultiByte (CP_ACP, 0, szStrings[i], -1, NULL, 0,

                                         NULL, NULL) ;

          pAnsiStr = malloc (iLength) ;

          WideCharToMultiByte (CP_ACP, 0, szStrings[i], -1, pAnsiStr, iLength,

                                          NULL, NULL) ;

          // 调用主程序的回调函数

          bReturn = pfnGetStrCallBack (pAnsiStr, pParam) ;

         

          // 如果输出超出屏幕大小,则退出函数

          if (bReturn == FALSE)

               return i + 1 ;

 

          free (pAnsiStr) ;

     }

     return iTotal ;

}

 

EXPORT int CALLBACK GetStringsW (GETSTRCB pfnGetStrCallBack, PVOID pParam)

{

     BOOL bReturn ;

     int  i ;

    

     for (i = 0 ; i < iTotal ; i++)

     {

          bReturn = pfnGetStrCallBack (szStrings[i], pParam) ;

         

          if (bReturn == FALSE)

               return i + 1 ;

     }

     return iTotal ;

}

 

 

 


 

/*----------------------

   STRLIB.H header file

  ----------------------*/

 

 

// 如果程序是CPP程序

#ifdef __cplusplus

// 告诉编译器用C的方式来链接

#define EXPORT extern "C" __declspec (dllexport)

#else

/* __declspec(dllexport)   声明一个导出函数,一般用于dll中
   __declspec(dllimport)   声明一个导入函数,一般用于使用某个dll的exe中 */

#define EXPORT __declspec (dllexport)

#endif

 

     // The maximum number of strings STRLIB will store and their lengths

 

#define MAX_STRINGS 256

#define MAX_LENGTH  64

 

     // The callback function type definition uses generic strings

 

typedef BOOL (CALLBACK * GETSTRCB) (PCTSTR, PVOID) ;

 

     // Each function has ANSI and Unicode versions

 

EXPORT BOOL CALLBACK AddStringA (PCSTR) ;

EXPORT BOOL CALLBACK AddStringW (PCWSTR) ;

 

EXPORT BOOL CALLBACK DeleteStringA (PCSTR) ;

EXPORT BOOL CALLBACK DeleteStringW (PCWSTR) ;

 

EXPORT int CALLBACK GetStringsA (GETSTRCB, PVOID) ;

EXPORT int CALLBACK GetStringsW (GETSTRCB, PVOID) ;

 

     // Use the correct version depending on the UNICODE identifier

 

#ifdef UNICODE

#define AddString    AddStringW

#define DeleteString DeleteStringW

#define GetStrings   GetStringsW

#else

#define AddString    AddStringA

#define DeleteString DeleteStringA

#define GetStrings   GetStringsA

#endif

 


 

//资源文件

//

#include "resource.h"

 

#define APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 2 resource.

//

#include "afxres.h"

 

/////////////////////////////////////////////////////////////////////////////

#undef APSTUDIO_READONLY_SYMBOLS

 

/////////////////////////////////////////////////////////////////////////////

// English (U.S.) resources

 

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)

#ifdef _WIN32

LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US

#pragma code_page(1252)

#endif //_WIN32

 

#ifdef APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

// TEXTINCLUDE

//

 

1 TEXTINCLUDE DISCARDABLE

BEGIN

    "resource.h/0"

END

 

2 TEXTINCLUDE DISCARDABLE

BEGIN

    "#include ""afxres.h""/r/n"

    "/0"

END

 

3 TEXTINCLUDE DISCARDABLE

BEGIN

    "/r/n"

    "/0"

END

 

#endif    // APSTUDIO_INVOKED

 

 

/////////////////////////////////////////////////////////////////////////////

//

// Dialog

//

 

ENTERDLG DIALOG DISCARDABLE  20, 20, 186, 47

STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION "Enter"

FONT 8, "MS Sans Serif"

BEGIN

    LTEXT           "&Enter:",IDC_STATIC,7,7,26,9

    EDITTEXT        IDC_STRING,31,7,148,12,ES_AUTOHSCROLL

    DEFPUSHBUTTON   "OK",IDOK,32,26,50,14

    PUSHBUTTON      "Cancel",IDCANCEL,104,26,50,14

END

 

DELETEDLG DIALOG DISCARDABLE  20, 20, 186, 47

STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION "Delete"

FONT 8, "MS Sans Serif"

BEGIN

    LTEXT           "&Delete:",IDC_STATIC,7,7,26,9

    EDITTEXT        IDC_STRING,31,7,148,12,ES_AUTOHSCROLL

    DEFPUSHBUTTON   "OK",IDOK,32,26,50,14

    PUSHBUTTON      "Cancel",IDCANCEL,104,26,50,14

END

 

 

/////////////////////////////////////////////////////////////////////////////

//

// Menu

//

 

STRPROG MENU DISCARDABLE

BEGIN

    MENUITEM "&Enter!",                     IDM_ENTER

    MENUITEM "&Delete!",                    IDM_DELETE

END

 

 

/////////////////////////////////////////////////////////////////////////////

//

// DESIGNINFO

//

 

#ifdef APSTUDIO_INVOKED

GUIDELINES DESIGNINFO DISCARDABLE

BEGIN

    "ENTERDLG", DIALOG

    BEGIN

        LEFTMARGIN, 7

        RIGHTMARGIN, 179

        TOPMARGIN, 7

        BOTTOMMARGIN, 40

    END

 

    "DELETEDLG", DIALOG

    BEGIN

        LEFTMARGIN, 7

        RIGHTMARGIN, 179

        TOPMARGIN, 7

        BOTTOMMARGIN, 40

    END

END

#endif    // APSTUDIO_INVOKED

 

#endif    // English (U.S.) resources

/////////////////////////////////////////////////////////////////////////////

 

 

 

#ifndef APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 3 resource.

//

 

 

/////////////////////////////////////////////////////////////////////////////

#endif    // not APSTUDIO_INVOKED

 


 

VS2010 项目配置

 

修改项目的依赖关系

 

在项目名称上点击右键,选择项目依赖项。如图:

 

依赖项

 

 

设置项目的DLL文件依赖

 

在主程序的项目名称上点击右键,选择属性。在新窗口中点击 配置属性->链接器->输入,右边的 附加依赖项 中写入需要引入的DLL文件的链接文件(*.lib)。如图:

 

DLL依赖项

 

设置共享内存节的特性

 

选择 DLL 项目的属性,配置属性->链接器->常规->指定节特性。如图:

 

节特性

 

 

字母 RWS 表示数据段具有读、写和共享属性。

也可以直接用DLL原始码指定连结选项

#pragma comment(linker,"/SECTION:shared,RWS")

 

制造业与工业知识图谱应用 在全球数字化转型背景下,制造业面临创新周期缩短、质量管控精细化等挑战。知识图谱技术通过结构化表示工业知识,为智能制造提供关键技术支撑。工业知识图谱具有专业性强、多源异构数据融合、实时性要求高等特点,其构建流程涵盖本体设计、知识抽取与整合等环节。研究显示,知识图谱与大模型结合可提升工业场景的智能化水平,在设备故障诊断、供应链优化等领域具有显著应用价值。该技术有望成为制造业数字化转型的核心驱动力。 阅读详情

相关推荐

MFRC522防冲突机制详解:当两张IC卡同时靠近读写器,会发生什么?

本文深入解析了MFRC522芯片在多张IC卡同时靠近RFID读写器时的防冲突机制,重点介绍了二叉树搜索算法在比特级的实现原理。通过详细的寄存器配置优化和实际工程案例,展示了如何有效解决信号碰撞问题,提升多卡场景下的读写性能。

weixin_29191669的博客 429

有关ASP.NET中的UpdateProgress控件的使用

 前台代码    Namespace="System.Web.UI" TagPrefix="asp" %>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/1999/xhtml" >    无标题页                             

天道酬勤—>God helps those who help themselves;Efforts 933

ARCGIS绘制全国各省PM2.5浓度图操作步骤

ArcGIS新手小白一枚,经常需要帮助老师绘制一些简单的空间图,利用ArcGIS绘制全国各省的pm2.5浓度图,简单又方便,不记下来会忘记~

weixin_43458484的博客 1万+

ASP.NET AJAX入门系列(6):UpdateProgress控件简单介绍

在ASP.NET AJAX Beta2中,UpdateProgress控件已经从“增值”CTP中移到了ASP.NET AJAX核心中。以下两篇关于UpdateProgress的文章基本翻译自ASP.NET AJAX官方网站。 主要内容1.UpdateProgress控件简单使用2.使用多个UpdateProgress控件 一.UpdateProgress控件简单使用

电子商务 asp.net ajax 867

保姆级教程:用Protege 5.5.0从零构建你的第一个知识图谱(附实战案例文件)

本文提供了一份详细的Protege 5.5.0使用指南,从零开始构建知识图谱。通过'中国古代文人关系网'实战案例,涵盖软件安装、本体创建、属性定义、实例填充到高级功能应用的全流程,帮助初学者快速掌握知识建模的核心技能。

weixin_26808205的博客 234

[捷稀 JCG Q30 Pro 刷机说明] 以刷入openwrt24.10为例

摘要: 本文详细介绍了捷稀JCG Q30 Pro路由器刷入OpenWrt 24.10系统的步骤。通过先刷入OpenWrt 23.05过渡固件,再升级Uboot,最后通过TFTP加载工厂镜像完成刷机。关键步骤包括解锁分区、刷写Uboot、进入恢复模式及配置网络。文章还提供了无线设置、Tailscale内网穿透等进阶命令,并附参考文档和固件下载链接。适用于有一定技术基础的玩家,需注意操作风险,严格按流程执行。

贤时间 7133

python正则表达式匹配sql语句中的表名

能够从sql语句中匹配表名,表的简称。使用的是python的正则表达式匹配的,本想做一个和plsql类似的工具,还没搞完整,先记录一下 # -*- coding: UTF-8 -*- import re keylist=['ACCESS','ADD','ALL','ALTER','AND','ANY','AS','ASC','AUDIT','BETWEEN','BY','

chl0000的专栏 8020

Zemax:初学者的混合模式

光线以序列模式开始,然后接近非序列组件的入口端口。到达入口端口后,光线以非序列模式传播,然后接近出口端口。光线离开出口端口后,我们又回到序列模式。在此博客中,使用混合模式的示例将演示根据您自己的需要复制此工作流程所需的基本设置,以及一些有用的技巧。非序列组件表面类型必须在序列模式和非序列模式下定义。为了定义非序列组件的几何形状,请转到设置->编辑器->非序列,单击非序列编辑器。一旦我们进入非序列组件编辑器:表面 2 上的组件组,找到一个对象类型并进行定义。它能让您兼具序列模式的精确性和非序列模式的灵活性。

jkh920184196的博客 1339

动态链接库 简单的DLL (转载)

动态链接库 智能中国——游戏组  整理编译  

limeng0579的专栏 1437

Python爬虫实战:利用Playwright和反反爬技术高效抓取Bloomberg金融数据

用户行为分析(鼠标移动、点击模式)请求头检测IP频率限制WebSocket通信验证Canvas指纹识别我们的爬虫需要模拟人类行为,使用代理IP池,并合理控制请求频率。

2201_76125261的博客 1020

YOLOv12改进策略【Neck】| CGA Fusion:内容引导的注意力融合模块,空间权重引导的多模态特征自适应融合

本文记录的是利用CGA Fusion 模块改进 YOLOv12 的多模态融合部分。(Content-Guided Attention Fusion)通过内容引导注意力生成空间权重,引导高低层特征的自适应融合。本文利用模块,通过内容引导注意力生成空间权重,自适应地融合两个模态的特征,在特征融合阶段实现跨模态语义对齐与噪声抑制,增强对不同模态互补特征的利用能力,从而提升模型在多模态场景下的检测鲁棒性与准确性。DEA-Net: Single image dehazing based on detail-enhan

Limiiiing的博客 433

解决Windows 程序界面闪烁问题的一些经验

119人阅读 评论(0)收藏 举报 #pragma data_seg介绍          用#pragma data_seg建立一个新的数据段并定义共享数据,其具体格式为:   #pragma data_seg ("shareddata")   HWND sharedwnd=NULL;//共享数据   #pragma data_seg()   -------------

gauss的专栏 434

基于 Simulink 的固态变压器(SST)多级协同控制实战教程

《固态变压器多级协同控制仿真指南》摘要: 本教程详细讲解了基于Simulink的固态变压器(SST)三级架构建模与控制方法。核心内容包含:1)搭建级联H桥整流(CHB)、双有源桥(DAB)和逆变器(VSI)的三级主电路;2)提出创新的多级协同控制策略,通过功率前馈实现输入输出级动态匹配;3)给出系统级功率平衡、单元级均压控制的具体实现方案。教程特别强调解决实际工程中的关键问题:代数环处理、软启动设计和刚性系统求解器选择,并提供了硬件在环(HIL)仿真建议。附带的MATLAB代码示例可直接用于实现电容电压均衡

xiaoheshang_123的博客 117

21.1 关于库的基本知识

摘录于《Windows程序(第5版,珍藏版).CHarles.Petzold 著》P958         如你所知,Windows 程序是一个可执行的文件,它通常创建一个或多个窗口,并使用消息循环来接收用户输入。动态链接库一般不能直接执行,而且它们一般也不接收消息。它们是包含许多函数的独立文件,这些函数可以被应用程序和其他 DLL 调用以完成某些特定的工作。一个动态链接库只有在另外一个模块调用

wilim 793

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

#pragma data_seg用法总结

Windows在一个Win32程序的地址空间周围筑了一道墙。通常,一个程序的地址空间中的数据是私有的,对别的程序而言是不可见的。但是执行STRPROG的多个执行实体表示了STRLIB在程序的所有执行实体之间共享数据是毫无问题的。当您在一个STRPROG窗口中增加或者删除一个字符串时,这种改变将立即反映在其它的窗口中。 在全部例程之间,STRLIB共享两个变量:一个字符数组和一个整数(记录已储存

jing0611的专栏 856

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

#pragma data_seg用法

Windows在一个Win32程序的地址空间周围筑了一道墙。通常,一个程序的地址空间中的数据是私有的,对别的程序而言是不可见的。但是执行STRPROG的多个执行实体表示了STRLIB在程序的所有执行实体之间共享数据是毫无问题的。当您在一个STRPROG窗口中增加或者删除一个字符串时,这种改变将立即反映在其它的窗口中。 在全部例程之间,STRLIB共享两个变量:一个字符数组和一个整数(记录已储存

495

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

进程共享变量#pragma data_seg用法

#pragma data_seg介绍          用#pragma data_seg建立一个新的数据段并定义共享数据,其具体格式为:   #pragma data_seg  ("shareddata")   HWND sharedwnd=NULL;//共享数据   #pragma  data_seg()    -----------------

tianyu的专栏 - Linux site:blog.youkuaiyun.com/wishfly 883

GDI 映像方式 之 SetViewportOrgEx 与 SetWindowOrgEx 解析

SetViewportOrgEx 与 SetWindowOrgEx 解析

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 4014

windows程序设计 「PopPad3」范例分析笔记

Open、Save、Find和Font通用对话框的使用。OPENFILENAME(Open) 、FINDREPLACE(Find & Replace) 、CHOOSEFONT(Font)结构简洁。

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 3520

windows程序设计 之 「KeyView1」范例算法分析 笔记

按键消息与字符消息的读取

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 2568

SDK 实作VS2010复制中文乱码修复

当复制VS2010中带有中文字符的代码到Office(Word, Excel, PowerPoint, Outlook)时,在中文字符后面会被添加一到三个乱码。比如复制"中文字符",粘贴到word就会变成(中D文?字Á?符¤?)。本文通过同时截取CF_UNICODETEXT和RTF两种剪贴板数据,以CF_UNICODETEXT中的正确数据为参照,对比剔除RTF中的乱码。程序添加了全局热键 CTRL+Q 和 监测状态。右下角则是一个动态文字Logo,鼠标移上去就会出现Logo,移开则改为快捷键说明

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 2121

windows 程序设计之「SINEWAVE.C」范例分析笔记

实作正弦波wave波形音频并播放。wave函数的调用方法:waveOutOpen ;waveOutPrepareHeader ;waveOutWrite ;waveOutReset ;waveOutClose ;waveOutUnprepareHeader 。

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 2067

windows程序设计 「PopPad3」之 POPPRNT.C 打印范例分析 笔记

PrintDlg 打印对话框, PRINTDLG 结构简介, 放弃打印程序 与 放弃打印对话框 的运用. 副本逐份打印( PD_COLLATE 旗标) 算法.

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 2050

windows程序设计之 「DevCaps2.C」范例分析 笔记

显示器设备 和 打印机设备 性能读取,打印机连接扫描,动态更改窗口菜单。

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 1951
上一篇: Windows程序设计「MDIDemo」 范例分析笔记
下一篇: windows 程序设计之「TESTMCI.C」范例分析笔记
TypeCool
博客等级 码龄22年 58粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值