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
英文地址,請注明出處:http://en.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打包的方式打包自己需要調用系統庫的程…