C#調用C++(QT5.5.1項目)的C++/CLI(CLR項目)項目技術筆記

来源:https://www.cnblogs.com/zhuxiaoxiao/archive/2019/03/12/10515437.html
-Advertisement-
Play Games

導航 1.編譯環境 2.項目配置 1.設置附加包含目錄 2.設置附加庫目錄 3.設置附加依賴項 3.CLR中各種定義 1.介面定義 2.類定義 3.枚舉定義 4.屬性定義 4.CLR中各種使用 1.類的實例化 2.命名空間的使用 5.CLR中數據類型的轉換 1.String ^ 到 QString ...


導航

  1.編譯環境

  2.項目配置

    1.設置附加包含目錄

    2.設置附加庫目錄

    3.設置附加依賴項

  3.CLR中各種定義

    1.介面定義

    2.類定義

    3.枚舉定義

    4.屬性定義

  4.CLR中各種使用

    1.類的實例化

    2.命名空間的使用

  5.CLR中數據類型的轉換

    1.String ^ 到 QString 的轉換

    2.QString 到 String ^ 的轉換

    3.char * 到 String ^

    4.wchar_t * 到 String ^

    5.數組的轉換

1.編譯環境

系統:windows10

環境:VS2010 + Qt5.5.1

2.項目配置

1.設置附加包含目錄

1.此項設置包含的頭文件,需要填入用到的.h文件目錄

2.下圖中的QTDIR是Qt5.5.1安裝目錄環境變數(預設路徑:C:\Qt\Qt5.5.1\5.5\msvc2010)

 

2.設置附加庫目錄

1.此項設置引用的lib目錄,如下圖。

 

3.設置附加依賴項

1.此處設置指定的lib文件,一般不用填寫。

 

3.CLR中各種定義

1.介面定義

 

 

2.類定義

 

3.枚舉定義

 

4.屬性定義

1.介面中定義:

 2.類中定義:

 

4.CLR中各種使用

1.類的實例化

所有.net對象都需要使用gcnew進行創建,gcnew創建的對象不需要自己手動釋放記憶體。

GTable ^ ret = gcnew GTable();

2.命名空間的使用

命名空間用於限定類,不同於C#,這裡使用::進行分割。

virtual MyNameSpace::ITable ^ GetTable(int index);

5.CLR中數據類型的轉換

1.String ^ 到 QString 的轉換

QString MarshalString(String ^ s)
{
	using namespace Runtime::InteropServices;
	const char* chars =
		(const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
	string str = chars;
	QString ret = str.c_str();
	Marshal::FreeHGlobal(IntPtr((void*)chars));
	return ret;
}

  

2.QString 到 String ^ 的轉換

String ^ MarshalStringLocal8(QString os)
{
	using namespace Runtime::InteropServices;
	if (os.isNull()) return nullptr;
	QByteArray data = os.toLocal8Bit();
	char * str = new char[data.length() + 1];
	strcpy_s(str, data.length() + 1, data.constData());
	String ^ ret = Marshal::PtrToStringAnsi(static_cast<IntPtr>(str));
	delete str;
	return ret;
}

 

String ^ MarshalString(QString os)
{
	using namespace Runtime::InteropServices;
	QByteArray data = os.toUtf8();
	char * str = new char[data.length() + 1];
	strcpy_s(str, data.length() + 1, data.constData());
	String ^ ret = Marshal::PtrToStringAnsi(static_cast<IntPtr>(str));
	delete str;
	return ret;
}

 

3.char * 到 String ^

String ^ MarshalString(char* os) {
	using namespace Runtime::InteropServices;
	String ^ ret = Marshal::PtrToStringAnsi(static_cast<IntPtr>(os));
	return ret;
}

 

4.wchar_t * 到 String ^

String ^ MarshalString(wchar_t* os) {
	using namespace Runtime::InteropServices;
	String ^ ret = Marshal::PtrToStringUni((IntPtr)os);
	return ret;
}

 

5.數組的轉換

using namespace System::Runtime::InteropServices;
QByteArray byteArray = obj.toByteArray();
int length = byteArray.count();
array<Byte> ^ rbyteArray = gcnew array<Byte>(length + 2);
Marshal::Copy((IntPtr)byteArray.data(), rbyteArray, 0, length);
ret = rbyteArray;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 系統:WIndows 10 工具:Visual Studio 2017 在寫代碼的過程中,我遇到了這樣的一個問題。如圖 vs錯誤提示是在SqlHelper中有錯,可是怎麼改都不能解決問題。 最後發現是前端往後端傳數據的時候,多寫了一個Id,如圖 在下麵編號中我已經回傳了一個Id的值,就不再需要一個h ...
  • ASP.NET Core 身份驗證及鑒權 目錄 + 項目準備 + 身份驗證 定義基本類型和介面 編寫驗證處理器 實現用戶身份驗證 + 許可權鑒定 思路 編寫過濾器類及相關介面 實現屬性註入 實現用戶許可權鑒定 + 測試 環境 + VS 2017 + ASP.NET Core 2.2 目標 以相對簡單優雅 ...
  • 昨天看碼雲上有兩個項目感覺很好, 可惜竟然不會Git 找了很久看了好多文檔看他寫的都好複雜啊! 在這我給寫出來一點點 1.下載Git https://git-scm.com/download/win 安裝 64-bit Git for Windows Setup. 這個版本。 2.在所需要下載的文件 ...
  • Electron.Net(結合Asp.Net Core)初次使用 ...
  • 最近在研究串口通訊,其中有幾個比較重要的概念,RS-232這種適配於上位機和PC端進行連接,RS-232只限於PC串口和設備間點對點的通信。它很簡單的就可以進行連接,由於串口通訊是非同步的,也就是說你可以同時向兩端或者更多進行數據發送,它們之間的傳輸數據類型是byte,串口通信最重要的參數是波特率、數 ...
  • 拋出C#異常 在大多數情況下,您不需要關心ServiceStack的錯誤處理,因為它為拋出C#異常的正常用例提供本機支持,例如: HTTP錯誤C#異常的預設映射 預設C#例外: ArgumentException使用HTTP StatusCode為400 BadRequest返回繼承 NotImpl ...
  • appsettings.json是什麼? 相信大家在.Net Framework的項目都會用的web.config,app.config這些文件,appsettings.json文件就是Asp.Net Core中代替這些config文件的一個,它支持更靈活的數據結構 好,現在我們添加一個參數,然後通 ...
  • 本文是介紹aws 作為api gateway,用asp.net core用web應用,.net core作為aws lambda function。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...