「C++」標籤的文章
帶有「C++」標籤的文章共 19 篇,依發布日期由新到舊排列。
-
Time Travel Debugging ── 把長期運轉中無法重現的問題「錄下來」再倒回去
一個月才出現一次的問題,當機傾印只拍得到結果。本文說明如何用 WinDbg 的 Time Travel Debugging(TTD) 錄下執行並倒回,涵蓋 TTD.exe 的錄製設計、環形緩衝區、TTD.Calls 查詢,以及和傾印的分工。
-
引數為什麼會壞掉 ── Windows 命令列引數的規則
在 Windows 上並不存在引數的陣列,傳給 CreateProcess 的是一條字串,分割由接收端負責。本文說明 CommandLineToArgvW・CRT・.NET 的分割規則,以及 .NET 的 ArgumentList 與 C++ 中正確的組裝方式。
-
父處理程序消失之後還剩下什麼 —— 用 Job Object 圈養子處理程序
為什麼強制結束 UI 之後,SDK 的輔助處理程序仍然殘留,一直佔著攝影機或 COM 連接埠?本文從量測應用的角度,說明如何用 Job Object 把處理程序樹變成一個單位,並借助 KillOnJobClose 與完成埠來設計子處理程序的壽命。
-
Win32 執行緒集區 API ── 用 CreateThreadpoolWork 做「不自己建立執行緒」的並行
原生程式碼裡是不是到處都在呼叫 CreateThread?本文依據一手資料解說 Vista 全面重新設計的 Win32 執行緒集區 API:work、timer、wait、io 四種物件、清理群組,以及回呼裡禁止做的事。
-
具名管道實務 ── 從設計到安全,看懂 Windows 行程間通訊的標準做法
以實務角度說明 Windows 行程間通訊的標準做法——具名管道。依據一手資料整理位元組模式與訊息模式的取捨、同時接受多個用戶端的伺服器結構、ACL 與模擬的安全設計,以及 .NET 的具名管道串流。
-
DllMain 與載入器鎖定 ── 「DLL 初始化時什麼都別做」真正的理由
為什麼不能在 DllMain 裡呼叫 LoadLibrary 或與其他執行緒同步?本文依據一次資料,從序列化所有 DLL 通知的載入器鎖定機制,一路說明到死結成立的典型情境、延遲初始化等正確設計,以及無回應的調查步驟。
-
虛假喚醒 ── 條件變數為何「沒被通知也會醒來」,以及 Windows 上正確的等待方式
條件變數的 wait 即使沒有通知到來也可能醒來(虛假喚醒)。本文從 Windows 的實作解開規格為何允許它,並用 Win32、C++ 與 C# 的程式碼示範以 while 與述詞撰寫的正確等待方式。
-
多執行緒實務最佳實踐 C++ 篇 ── 以 RAII 與 jthread 從結構上消除事故
C++ 的多執行緒是資料競爭會變成未定義行為的世界。本文整理 std::thread 解構函式的陷阱、以 jthread 與 stop_token 設計停止機制、scoped_lock 的死結迴避、atomic 的正確定位,以及與 Win32 同步 API 的使用區分。
-
DLL・COM 介面的向後相容性 ── 哪些變更會破壞呼叫端的判斷表
DLL 或 COM 元件的哪些變更會破壞呼叫端?本文整理二進位相容・原始碼相容・行為相容三層,依變更內容列出判斷表、COM 介面不可變的鐵則,以及 semver 的運用方式,作為實務指南彙整。
-
Windows 的 MFC 是什麼──維護既有資產的基礎知識
整理 Microsoft Foundation Classes(MFC)的概觀、與 Win32 的關係、應用程式結構、訊息映射、Document/View、DDX/DDV,以及維護時的注意事項。
-
Windows 應用程式安全處理子處理程序的檢查清單
在 Windows 應用程式中安全處理子處理程序,比起挑選啟動 API,更重要的是處理程序樹的所有權與結束流程的設計。本文梳理 Job Object、結束傳播、標準輸入輸出與 watchdog。
-
Windows 應用程式的單一檔案散發 - 單一執行檔與 OS 相依性的界線
想把 Windows 應用程式收攏成 1 個 EXE 時,本文梳理「把散發物收成 1 個」與「消除 OS 相依性」的差別,範圍涵蓋 .NET、C++、WebView2、WinUI、服務與驅動程式。
-
共用記憶體的陷阱與實務最佳實踐
梳理實務上使用共用記憶體時的陷阱,以及涵蓋同步、可見性、生命週期、ABI 與權限在內、能降低出錯機率的設計。
-
公平比較 C#/C++/Java/Go 執行速度的方法
本文梳理公平比較 C#、C++、Java、Go 執行速度的方法,涵蓋測量設計、warm-up、環境固定、統計的看法,以及具體的 bench 項目。
-
用 Media Foundation 把圖片與文字烙印進 MP4 影格的方法
本文梳理如何用 Media Foundation 把圖片與文字烙印到 MP4 影片的每一個影格,再產出一支新的 MP4,並以 Source Reader、繪製、色彩轉換、Sink Writer 的分工,以及單一檔案完結的 C++ 範例來說明。
-
在 Media Foundation 中把 YUV 轉換成 RGB 的方法
本文從 Source Reader 的自動轉換、NV12/YUY2 的自行轉換、stride 與色彩空間,梳理在 Media Foundation 中把 YUV 影格轉換成 RGB 的方法。
-
用 Media Foundation 從 MP4 的指定時間擷取靜態影像的方法
整理如何用 Source Reader 取出 MP4 中最接近指定時間的影格,把 stride 與 RGB32 的 alpha 整理好之後存成 PNG 的實作步驟。
-
從 C/C++ 呼叫 C# Native AOT DLL 的方法
本文說明如何以 Native AOT 把 C# 的類別庫發行成原生 DLL,並從 C/C++ 呼叫 UnmanagedCallersOnly 的進入點,從適用時機、實作模式與注意事項梳理這套構成。
-
Media Foundation 入門 - 從 COM 的視角理解這套 API
說明 Media Foundation 是什麼,並依照最初該掌握的順序,一併整理 COM、HRESULT、IMFSourceReader、MFT 等 Windows 媒體 API 的基本用語。