mfc与vs成功在xp系统所需做的修改

目录

  • 前言
  • 一、MFC程序 'inet_pton' 、'CT2A' 未声明问题
    • 1)问题1:'inet_pton' :undeclared identifier - 'inet_pton'未声明
    • 2)问题1:'CT2A' :undeclared identifier - 'CT2A'未声明
  • 二、VS程序 使用事件、委托问题
    • 1)问题:无法正确识别DataReceived?.Invoke(this, str);的语法


前言

运用在windows xp环境下调试,发现有些方法是在xp环境下不能实现的,今天将mfc程序和C#程序修改的方面进行总结


一、MFC程序 ‘inet_pton’ 、‘CT2A’ 未声明问题

在VC++6.0中加入新编写的代码,会报上述问题,主要是因为该老旧开发环境与现代API和ATL/MFC宏的兼容性问题。

1)问题1:‘inet_pton’ :undeclared identifier - 'inet_pton’未声明

其原因:

  • inet_pton 是较新的POSIX标准函数,VC6 默认不支持(需Windows SDK 8.0+)。
  • VC6 自带的 wsock32.h 仅提供旧版函数如 inet_addr。

解决方法:改用inet_addr,代码更改如下:

BOOL CSocketNet::ServerSet()
{// 设置服务器地址server.sin_family = AF_INET;server.sin_port = htons(8888); // 服务器端口server.sin_addr.s_addr = inet_addr("127.0.0.1");if (server.sin_addr.s_addr == INADDR_NONE){closesocket(clientSocket);WSACleanup();AfxMessageBox(_T("设置服务器地址失败!"), MB_OK | MB_ICONINFORMATION);return FALSE;}else{return TRUE;}
}

2)问题1:‘CT2A’ :undeclared identifier - 'CT2A’未声明

其原因:

  • CT2A 是ATL/MFC的字符串转换宏,VC6 默认未启用ATL支持。

解决方法:强制使用ANSI版本 - 代码如下:

BOOL CSocketNet::SendMes(CString str) {// 强制转换为ANSI字符串(VC6默认字符集)LPCSTR ansiMsg = (LPCSTR)str;  // 直接转换(仅当str为ANSI时安全)if (send(clientSocket, ansiMsg, strlen(ansiMsg), 0) < 0) {return FALSE;}return TRUE;
}

二、VS程序 使用事件、委托问题

1)问题:无法正确识别DataReceived?.Invoke(this, str);的语法

其原因:

  • C# 版本兼容性问题​​
    ?.(null 条件运算符)和 Invoke 的事件触发语法需要 ​​C# 6.0+​​。如果你的项目使用的是旧版 C#(如 5.0),会报语法错误。
  • 事件委托类型不匹配​​
    EventHandler 是标准事件委托类型,但可能因项目配置导致编译器无法识别其 Invoke 方法。

解决方法:使用传统事件触发方式,代码如下:
1、在需事件监听的类中,以CodeService类为例,编写如下代码:

namespace ConsoleApplocational.Service
{// 定义委托,用于事件处理程序的签名public delegate void DataReceivedEventHandler(object sender,string data);class CodeService{...} 
}

2、在CodeService类中定义事件并实现触发方法,代码如下:

class CodeService
{// 定义事件public event DataReceivedEventHandler DataReceived;。。。
}

3、在CodeService类中的对应方法触发事件,代码如下:

void HandleClient(TcpClient client)
{using (client){using (var stream = client.GetStream()){byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0){string receivedData = Encoding.UTF8.GetString(buffer, 0, bytesRead);Console.WriteLine("Received from C++:" + receivedData);// 触发事件if(DataReceived != null){DataReceived(this, receivedData);}}}}
}

4、在main函数里,跟之前一样定义,代码如下:

namespace ConsoleApplication1
{static void Main(string[] args){CodeService codeService = new CodeService();codeService.DataReceived += OnDataReceived; // 订阅事件}	public static void OnDataReceived(object sender, string data){StrLine = data; //获取数据}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86291.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC系列(三)(请求处理的十个实验(上))

0 引言 作者正在学习SpringMVC相关内容&#xff0c;学到了一些知识&#xff0c;希望分享给需要短时间想要了解SpringMVC的读者朋友们&#xff0c;想用通俗的语言讲述其中的知识&#xff0c;希望与诸位共勉&#xff0c;共同进步&#xff01; 本系列会持续更新&#xff01;&…

Python案例练习:函数专题

用函数重新设计文章单词出现次数程序 composition This is my family. We have a father, a mother and two brothers. My father is a doctor. He works in a hospital. My mother is a teacher. She teaches English in a school. My older brother is a student. He stu…

数据驱动 AI 时代:数据库行业的技术跃迁与生态重构

在数据驱动的 AI 战场&#xff0c;真正的决胜武器不是复杂精妙的算法模型&#xff0c;而是深埋在企业核心系统中的高维数据网络&#xff08;图&#xff09;。 时至今日&#xff0c;市场对AI的风向正从“狂飙突进”转向“精耕细作”&#xff0c;就在上周&#xff08;米国时间6月…

码分复用通俗理解

一、码分复用&#xff08;CDMA&#xff09;的通俗理解 码分复用&#xff08;Code Division Multiple Access&#xff0c;CDMA&#xff09;是一种让多个用户在同一时间、同一频段上同时传输数据的技术。它的核心思想是&#xff1a;给每个用户分配一个唯一的“编码钥匙”&#x…

MAC、IP地址、TCP、UDP、SSL、OSI模型

目录 一 概要 二 MAC和IP地址 &#xff08;1&#xff09;什么是 MAC 地址&#xff1f; &#xff08;2&#xff09;什么是 IP 地址&#xff1f; &#xff08;3&#xff09;MAC 地址 vs IP 地址对比表 &#xff08;4&#xff09;总结一下 二 TCP、UDP、SSL详细介绍 &#…

弱口令介绍及破解方式笔记

一、弱口令的定义与危害 弱口令是指容易被猜测或破解的密码&#xff0c;通常包含简单数字组合&#xff08;如“123456”&#xff09;、键盘连续字符&#xff08;如“qwerty”&#xff09;、个人信息&#xff08;如生日、姓名&#xff09;或常见词汇&#xff08;如“password”…

Kotlin 中ArrayList、listOf、arrayListOf 和 mutableListOf区别

在 Kotlin 中&#xff0c;ArrayList、listOf、arrayListOf 和 mutableListOf 是常用的集合创建方式&#xff0c;但它们在类型、可变性和使用场景上有明显区别。以下是核心对比&#xff1a; 一、基本定义与类型 创建方式类型可变性底层实现ArrayList<T>()ArrayList<T…

C盘清理技巧分享:释放宝贵空间,提升电脑性能

Hi&#xff0c;我是布兰妮甜 &#xff01;随着电脑使用时间的增长&#xff0c;C盘空间逐渐被各种文件占据&#xff0c;导致系统运行缓慢、程序响应迟钝。对于许多用户来说&#xff0c;C盘空间不足是一个常见且令人头疼的问题。本文将分享一系列实用的C盘清理技巧&#xff0c;帮…

【 感知集群】大规模分布式基础设施的AI赋能蓝图

第一部分&#xff1a;AIOps基础——从被动响应到预测性运维 在本报告的初始部分&#xff0c;我们将为管理一个复杂的大规模集群建立关键的基线。我们认为&#xff0c;在追求高级优化或未来主义架构之前&#xff0c;一个强大、由人工智能驱动的运维基础是不可或缺的。本部分将详…

《R循环:深度解析与高效使用技巧》

《R循环:深度解析与高效使用技巧》 引言 R语言作为一种功能强大的统计计算和图形显示语言,被广泛应用于科研、数据分析、金融等领域。R循环是R语言中的核心概念之一,对于提高编程效率、处理复杂数据至关重要。本文将深度解析R循环,并介绍高效使用技巧,帮助读者更好地掌握…

Windows WSL安装Emscripten‌/emsdk(失败)

前面说过&#xff0c;在CMD、PS下&#xff0c;根本安装不了。那只能试试在WSL安装了。 安装ubuntu 管理员运行PowerShell wsl --install ubuntu自带python3&#xff0c;不需要安装。 安装 我就奇怪了&#xff0c;都说得头头是道&#xff0c;实际上一操作就出问题&#xff…

SpringBoot + EMQX 通过MQTT协议和下位机建立通讯并获取下位机的监测数据-->测试

一、说明 在上一个博客中&#xff0c;我们部署了 EMQX 服务器&#xff0c;实现了 SpringBoot EMQX 通过MQTT协议和下位机建立通讯并获取下位机的监测数据的编码。现在我们对编码进行进一步的测试。 二、编码测试 2.1 在 EMQX 服务器开启客户端认证 这里的客户端认证&#xf…

#17 修改开源模型以适配新任务

在Kaggle的评论区看到有选手想用Swin Transformer来做回归任务,从这个片段可以窥见修改模型的一些思路,于是记录下来学习一下 基于 torchvision Swin_B 模型的特征提取 from torchvision.models.swin_transformer import swin_b, Swin_B_Weights, swin_v2_b, Swin_V2_B_Weig…

变电站自动化系统有哪些设备?

变电站自动化系统是由多类设备协同工作的复杂系统&#xff0c;其设备按功能层级可分为过程层设备​&#xff08;直接连接一次设备&#xff09;、间隔层设备​&#xff08;实现保护控制&#xff09;和站控层设备​&#xff08;数据汇总与监控&#xff09;&#xff0c;同时还包括…

树莓派超全系列教程文档--(66)rpicam-apps可用选项介绍之视频选项

这里写目录标题 视频选项qualitybitrateintraprofilelevelcodecsave-ptskeypresssignalinitialsplitsegmentcircularinlinelistenframesframerate 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 视频选项 本节中指定的命令行选项仅适用于视频输…

C++98和C++11的for循环使用对比

1、C98 中的 传统for 循环 语法结构&#xff1a;这种形式的 for 循环由三个部分组成&#xff1a;初始化语句&#xff08;int i 0&#xff09;、循环条件&#xff08;i < 10&#xff09;和迭代语句&#xff08;i&#xff09;。通常用于遍历一个已知大小的循环范围。使用场景…

ubutun 操作

1.防火墙 Ubuntu 默认使用 ufw&#xff08;Uncomplicated Firewall&#xff09;作为其防火墙管理工具。ufw提供了一个用户友好的界面来配置和管理iptables防火墙。下面是一些基础的ufw命令&#xff0c;帮助你管理Ubuntu的防火墙。 1. 检查UFW状态 sudo ufw status 2. 启用UFW s…

麒麟V10操作系统离线安装Docker、Docker compose和1Panel

安装Docker 下载docker离线安装包&#xff0c;并上传到服务器 下载地址&#xff1a;https://download.docker.com/linux/static/stable/x86_64/ 解压压缩包&#xff0c;并复制到指定目录 tar -xvf xxx.tgzcp docker/* /usr/bin/配置Docker服务&#xff0c;并赋予文件执行权限…

Java 与 MySQL 性能优化:MySQL性能指标解读与监控方法

文章目录 引言一、关键性能指标解读1. QPS&#xff08;Queries Per Second&#xff09;&#xff1a;每秒查询数2. TPS&#xff08;Transactions Per Second&#xff09;&#xff1a;每秒事务数3. 缓存命中率 二、性能监控工具介绍与使用1. SHOW STATUS2. Prometheus Grafana&a…

香橙派3B学习笔记13:deb 打包调用系统库与.so动态链接库的程序(部分失败)

之前接触到了snap打包自己的应用程序与依赖&#xff0c;但它的默认沙盒隔离的机制导致其访问系统库有局限性&#xff0c;它在访问硬件资源的时候没有的那些权限需要额外声明&#xff0c;不符合应用发布的便携性要求。 本文学习下如何用deb打包的方式打包自己需要调用系统库的程…