c/c++中一些不常用但有用的知識

1.變長數組

bool fun(int cnt)
{unsigned char data[cnt];return true;
}

?????????在 C 語言中,變長數組(Variable Length Arrays,VLA)是 C99 標準引入的特性,允許使用變量來定義數組的長度。因此,在 C 版本的代碼中,可以使用您提供的方式來動態申請數組,前提是編譯器支持 C99 標準。

2.c++的函數作為回調函數傳給c

class UdpTask : public QObject
{Q_OBJECTpublic:static UdpTask &instance(){static UdpTask self;return self;}void registration();signals:void sendImage(QImage image);
private:explicit UdpTask(QObject *parent = nullptr);//~UdpTask();UdpTask(const UdpTask &self);const UdpTask &operator=(const UdpTask &self);static void receivedDataHandle(int frame_id, void* buffer, int buffer_len);};
void UdpTask::receivedDataHandle(int frame_id, void* buffer, int buffer_len)
{/* 發送信號 */memcpy(instance().image->bits(), &buffer, buffer_len);emit instance().sendImage(*instance().image);
}
extern "C" {// C 語言寫的回調注冊函數
typedef void(*eth_recv_func_t)(int frame_id, void* buffer, int buffer_len);
ETHTRANSFERLIB_API int StartReceiveData(eth_recv_func_t func, int data_size);
}void UdpTask::registration(int len)
{StartReceiveData(receivedDataHandle, len);
}

這里用了?C++ 類的靜態函數作為回調函數,

靜態的單例函數?instance()?用于獲取?UdpTask?的唯一實例。

是為了在靜態函數中調用其他變量(如image,sendimage等),否則其他變量都需要申請為靜態的。

3.動態加載dll

當某些靜態庫的函數名稱與頭文件中的聲明不匹配時,如下圖。一般為編譯不規范沒有加def文件導致的,我們利用下面命令讀一下dll中的信息

dumpbin /headers your_dll_file.dll

?這是一段利用qt加載動態庫的方法

#include <QLibrary>
#include <QDebug>int main() 
{// 創建 QLibrary 對象并加載動態庫QLibrary myLib("./lib/xxx.dll");if (myLib.load()) {// 獲取函數地址 可以用之前出現亂碼字符串來找到真正的函數void* symbol = myLib.resolve("?myFunctionName@@YAXXZ");//這樣就可以調用了symbol();// 卸載動態庫myLib.unload();} return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207106.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207106.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207106.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

快速在VMware虛擬機上運行Kali Linux(保姆級教程)

本期將演示如何在VMware虛擬機上快速、輕松地安裝Kali Linux。Kali Linux是一款專為滲透測試和網絡安全而設計的操作系統&#xff0c;擁有很多強大的工具和功能。 在運行任何虛擬機之前&#xff0c;一定要先確保已經打開主板BIOS上的虛擬化支持。 下載VMware 接著來到vmware的…

vue 一直運行 /sockjs-node/info?及 /sockjs-node/info報錯解決辦法

sockjs-node介紹 sockjs-node 是一個JavaScript庫&#xff0c;提供跨瀏覽器JavaScript的API&#xff0c;創建了一個低延遲、全雙工的瀏覽器和web服務器之間通信通道。 服務端&#xff1a;sockjs-node&#xff08;https://github.com/sockjs/sockjs-node&#xff09; 客戶端&a…

[全志Tina/Linux]全志修改bootlogo分區數據從而修改bootlogo

一、需求 在不進行鏡像燒錄的情況下&#xff0c;通過啟動項或腳本將已存在于主板的bootlogo文件更新到bootlogo分區中&#xff0c;從而實現bootlogo的更新 二、操作 1、在主板上查找bootlogo文件路徑 find -name bootlogo* 實機效果&#xff1a; 2、進入文件夾路徑 cd ./d…

Java網絡編程——對象的序列化與反序列化

當兩個進程進行遠程通信時&#xff0c;彼此可以發送各種類型的數據&#xff0c;如文本、圖片、語音和視頻等。無論是何種類型的數據&#xff0c;都會以二進制序列的形式在網絡上傳送。當兩個Java進程進行遠程通信時&#xff0c;一個進程能否把一個Java對象發送給另一個進程呢&a…

LeetCode 每日一題 Day 6(DFS+BFS)

1466. 重新規劃路線 n 座城市&#xff0c;從 0 到 n-1 編號&#xff0c;其間共有 n-1 條路線。因此&#xff0c;要想在兩座不同城市之間旅行只有唯一一條路線可供選擇&#xff08;路線網形成一顆樹&#xff09;。去年&#xff0c;交通運輸部決定重新規劃路線&#xff0c;以改變…

c語言詞法分析器

詞法分析器&#xff08;也稱為詞法解析器或詞法掃描器&#xff09;是編譯器的一個組成部分&#xff0c;它的任務是將輸入的源代碼&#xff08;字符流&#xff09;分解成稱為“標記”的序列&#xff0c;其中每個標記對應于源代碼中的一個單詞或符號。 以下是一個簡單的C語言詞法…

12月7日作業

使用QT模仿一個登陸界面&#xff08;模仿育碧Ubisoft登錄界面&#xff09; #include "myqq.h"MyQQ::MyQQ(QWidget *parent): QMainWindow(parent) {this->resize(880,550); //設置窗口大小this->setFixedSize(880,550); //固定窗口大小this->setStyleShee…

android 藍牙開關設置

frameworks/base/packages/SettingsProvider/res/values/defaults.xml <bool name"def_bluetooth_on">false</bool>將 def_bluetooth_on 的值設為false&#xff08;系統默認開啟值&#xff09; adb動態設置 關閉&#xff1a;adb shell settings put gl…

【華為OD題庫-082】TLV解析II-Java

題目 兩端通過TLVQ格式的報文來通信&#xff0c;現在收到對端的一個TLV格式的消息包&#xff0c;要求生成匹配后的(tag,length,valueOffset)列表。具體要求如下: (1)消息包中多組tag、length、value緊密排列&#xff0c;其中tag,length各占1字節(uint8),value所占字節數等于len…

SpringMVC 案例

文章目錄 前言1. 計算器1.1 準備前端代碼1.2 測試前端代碼1.3 完成后端代碼1.4 驗證程序 2. 留言板2.1 前端代碼準備2.2 測試前端代碼2.3 完成前后端交互代碼2.4 完成后端代碼2.5 案例測試2.6 完善前后端交互2.7 完善后端代碼2.8 完整功能測試 lombok簡單的方式添加Lombok工具3…

vue3使用mitt用于組件之間傳值

vue3已經沒有提供配套的事件總線bus&#xff0c;需要使用第三方庫mitt來完成vue2中bus完成的事情 1.安裝 npm install mitt2.引用 bus.js import mitt from mitt; const bus mitt(); export default bus;3.在需要使用的vue文件中導入bus import bus from ./mitt4.使用mitt…

HarmonyOS學習 第1節 DevEco Studio配置

俗話說的好&#xff0c;工欲善其事,必先利其器。我們先下載官方的開發工具DevEco Studio. 下載完成后&#xff0c;進行安裝。 雙擊DevEco Studio&#xff0c;點擊Next按照指引完成安裝 重新啟動DevEco&#xff0c;點擊 Agree 進入環境配置&#xff0c;安裝Node.js和ohpm 點擊Ne…

MQTT 協議入門:輕松上手,快速掌握核心要點

文章目錄 什么是 MQTT&#xff1f;MQTT 的工作原理MQTT 客戶端MQTT Broker發布-訂閱模式主題QoS MQTT 的工作流程開始使用 MQTT&#xff1a;快速教程準備 MQTT Broker準備 MQTT 客戶端創建 MQTT 連接通過通配符訂閱主題發布 MQTT 消息MQTT 功能演示保留消息Clean Session遺囑消…

【WPF】使用ObservableCollection解決:累積計數x與實際計數x不相同

使用觀察模式和集合 錯誤代碼 public List<IPAddress> iPAddressDevices new List<IPAddress>();public List<IPAddress> IPAddressDevices { get > iPAddressDevices; set {iPAddressDevices value;RaisePropertyChanged(nameof(IPAddressDevices));…

spring IOC介紹

spring的Ioc真是個好東西啊&#xff0c;那它到底是什么東西呢&#xff0c;控制反轉&#xff0c;到底是怎么轉的呢&#xff1f; 假設啊你現在是一個導演&#xff0c;想排部戲&#xff0c;那是不是得需要演員和舞臺(spring中的bean)&#xff0c;如果按平常的編程思維就是new 一個…

vue-baidu-map實現在地圖上選擇范圍并解決相關問題

vue-baidu-map實現在地圖上選擇范圍并解決相關問題 實現地圖上選擇不規則范圍實現功能遇到的問題1、覆蓋物多邊形怎么才能蓋住覆蓋物點2、遇到其他問題 實現地圖上選擇不規則范圍 這個功能比較簡單&#xff0c;只需要使用vue-baidu-map插件的覆蓋物多邊形功能就行了。直接看文…

Win10專業版找不到安全中心選項的解決方法

在Win10電腦中&#xff0c;安全中心功能起到很大的作用。但是&#xff0c;有用戶在Win10專業版電腦上找不到安全中心選項&#xff0c;從而影響到自己的正常使用。下面小編分享解決Win10專業版系統沒有安全中心的簡單方法&#xff0c;解決后在Win10專業版就能成功找到安全中心了…

哈希表及其基礎(java詳解)

目錄 一、哈希表基礎 二、哈希函數的設計 哈希函數的設計原則 三、java中的hashCode 基本數據類型的hashCode使用 自定義類型的hashCode使用 需要注意 四、哈希沖突的處理 鏈地址法Seperate Chaining 五、實現屬于我們自己的哈希表 六、哈希表的動態空間處理和復雜…

通過項目管理軟件監管新員工入職流程的方法與策略

項目管理軟件是什么&#xff1f;項目管理軟件都能做什么&#xff1f;是不是只有項目團隊需要啊&#xff1f;NO&#xff01;項目管理軟件乍聽其名不免讓人覺得這不過是個項目領域的專用工具。 那什么是項目呢&#xff1f;項目是為創造獨特的產品、服務或成果而進行的體系化的工…

物聯網+AI智慧工地云平臺源碼(SaaS模式)

智慧工地云平臺充分運用數字化技術&#xff0c;聚焦施工現場崗位一線&#xff0c;依托物聯網、互聯網、AI等技術&#xff0c;圍繞施工現場管理的人、機、料、法、環五大維度&#xff0c;以及施工過程管理的進度、質量、安全三大體系為基礎應用&#xff0c;實現全面高效的工程管…