【游戲引擎 - C#腳本系統】6、C#端調用C++函數

強烈建議閱讀Mono官方文檔

有mono庫提供的API,這個過程非常簡單,通過mono在C++中注冊函數,然后在C#中聲明和調用這些函數

1、在C++中注冊Internal Call:

C++代碼中定義一個函數

static void CppFunc() 
{std::cout << "這是在C++中實現的函數\n";
}

這是在C++中實際的函數實現。注意static并非必須,僅僅因為我想讓他只在當前編譯單元可見而已。

注冊Internal call

mono_add_internal_call("Hello::CppFunction", CppFunc);

這一行代碼將C函數 sample 注冊為內部調用(Internal Call),使得它可以從C#中直接調用。Hello::CppFunction 是注冊的名稱,表示在C#中調用這個函數時使用的名稱。CppFunc 則是實際的C函數名稱。

注意,需要在特定的App Domain中注冊Internal Call。當調用mono_domain_set來切換到一個新的App Domain時,通常原來的App Domain的所有注冊信息都不再有效,因此你需要重新注冊Internal Call。

2、在C#中聲明Internal Call

using System;
using System.Runtime.CompilerServices;	// 必要頭文件class Hello 
{public Hello(){CppFunction();}[MethodImplAttribute(MethodImplOptions.InternalCall)]extern static void CppFunction();
}

在C#中,使用 [MethodImpl(MethodImplOptions.InternalCall)] 特性來聲明一個內部調用。這告訴編譯器,實際的方法實現是在運行時的C++代碼中

如果C#中,類還處于一個命名空間中,那么注冊的時候必須給一個完整的路徑,這個路徑比較奇怪,例如這種情況

namespace Happy
{class Hello {public Hello(){CppFunction();}[MethodImplAttribute(MethodImplOptions.InternalCall)]extern static void CppFunction();}
}

注冊internal call 應該:

mono_add_internal_call("Happy.Hello::CppFunction", CppFunc);

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

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

相關文章

24 遞歸求解二叉樹打家劫舍

問題描述&#xff1a;在上次大街萬一條街道之后和一圈房屋后&#xff0c;小偷又發現了一個新的可行竊的地區。這個地區只有一個入口&#xff0c;我們稱之為根。除了根之外&#xff0c;每棟房子有且只有一個父房子與之項鏈&#xff0c;一番偵查之后&#xff0c;聰明的小偷意識到…

CGAL的3D簡單網格數據結構

由具有多個曲面面片的多面體曲面生成的多域四面體網格。將顯示完整的三角剖分&#xff0c;包括屬于或不屬于網格復合體、曲面面片和特征邊的單元。 1、網格復合體、 此軟件包致力于三維單純形網格數據結構的表示。 一個3D單純形復雜體由點、線段、三角形、四面體及其相應的組合…

從零開始搭建鏈上dex自動化價差套利程序(13)

優化 優化觸發條件&#xff1a; 之前的觸發條件有問題&#xff0c;導致遲遲不能觸發&#xff0c;優化后觸發條件如下&#xff1a; dydx_take 0.0002apex_make 0.0005?float(b_first_price_apex)-float(s_first_price_dydx) > float(b_first_price_apex)*apex_makefloat…

華為數通---配置Smart Link主備備份示例

定義 Smart Link&#xff0c;又叫做備份鏈路。一個Smart Link由兩個接口組成&#xff0c;其中一個接口作為另一個的備份。Smart Link常用于雙上行組網&#xff0c;提供可靠高效的備份和快速的切換機制。 目的 下游設備連接到上游設備&#xff0c;當使用單上行方式時&…

Microsoft 365 Copilot正式上線,如何穩定訪問體驗?

如果將微軟對人工智能的投資看成一場豪賭&#xff0c;Microsoft Copilot無疑是現階段最受矚目的賭注。2023年9月正式發布的Microsoft Copilot是一種基于大型語言模型&#xff08;LLM&#xff09;和微軟圖形&#xff08;Microsoft Graph&#xff09;的數據和人工智能&#xff08…

貝銳花生殼3大安全能力,保障網絡服務安全遠程連接

在沒有公網IP的情況下&#xff0c;使用內網穿透工具&#xff0c;將本地局域網服務映射至外網&#xff0c;雖然高效快捷&#xff0c;但信息安全也是不可忽略的方面。 對此&#xff0c;貝銳花生殼提供了多維度的安全防護能力&#xff0c;滿足不同場景下用戶安全遠程訪問內網服務的…

svn log | less

svn log | less 是一個命令行指令&#xff0c;用于查看 Subversion (SVN) 倉庫的提交日志&#xff0c;并通過分頁方式進行瀏覽。 具體而言&#xff0c;svn log 命令用于獲取 SVN 倉庫的提交歷史記錄。而 less 命令則是一個分頁器&#xff0c;它可以將輸出內容逐頁顯示在終端窗…

阿里巴巴通義實驗室周暢:讓大模型率先在PC上“跑起來”

12月7日&#xff0c;以“AI新生態 智啟新元年”為主題的首屆AI PC產業創新論壇在北京聯想集團總部舉辦。阿里巴巴-通義實驗室、通義千問大模型負責人周暢受邀出席分享關于端側大模型的技術進展&#xff0c;以及終端設備與AI結合的發展前景。 周暢表示&#xff0c;大模型技術的…

【Python百寶箱】Python與移動應用開發:框架對比與交互全指南

一站式指南&#xff1a;如何用Python打造移動應用的完美體驗 前言 隨著移動應用市場的不斷擴大&#xff0c;開發者們尋求更便捷、靈活的方式來構建跨平臺的應用。本文將帶領讀者深入探討Python在移動應用開發中的應用&#xff0c;聚焦于幾個主要框架&#xff0c;并詳細介紹它…

Python django-xadmin:構建強大的 Django 后臺管理系統

概要 Django作為一款強大的Web框架&#xff0c;其后臺管理系統提供了便捷的數據管理和操作方式。而 django-xadmin 則為Django的后臺管理系統提供了更加強大的功能和靈活的定制選項。在本文中&#xff0c;我們將深入研究如何使用django-xadmin&#xff0c;并通過詳細的示例代碼…

企業博客SEO:優化SOP,助您提升搜索引擎可見性

企業博客是互聯網時代企業與用戶溝通的重要渠道之一&#xff0c;引流成本也比較低。然而&#xff0c;依然有企業會處在3種狀態&#xff1a; 1. 有博客&#xff0c;但內容更新不積極或擱置 2. 有博客&#xff0c;但內容散亂 3. 根本就沒有博客 如果是這幾種狀態&#xff0c;…

Java網絡編程-深入理解BIO、NIO

深入理解BIO與NIO BIO BIO 為 Blocked-IO&#xff08;阻塞 IO&#xff09;&#xff0c;在 JDK1.4 之前建立網絡連接時&#xff0c;只能使用 BIO 使用 BIO 時&#xff0c;服務端會對客戶端的每個請求都建立一個線程進行處理&#xff0c;客戶端向服務端發送請求后&#xff0c;…

3接上篇 我的自定義GPTs的改進優化 與物理世界連接成功 GPTs的創建與使用定義和執行特定任務的功能模塊 通過API與外部系統或服務的交互

https://blog.csdn.net/chenhao0568/article/details/134875067?spm1001.2014.3001.5502 從服務器日志里看到請求多了一個“location” 23.102.140.123 - - [08/Dec/2023:14:02:20 0800] "GET /getWeather.php?location&locationNewYork HTTP/1.1" 200 337 &…

2024年甘肅省職業院校技能大賽信息安全管理與評估賽項一階段樣題一

2024年甘肅省職業院校技能大賽高職學生組電子與信息大類信息安全管理與評估賽項樣題一 競賽需要完成三個階段的任務&#xff0c;分別完成三個模塊&#xff0c;總分共計 1000分。三個模塊內容和分值分別是&#xff1a; 1.第一階段&#xff1a;模塊一 網絡平臺搭建與設備安全防…

【K8S】微服務不香了?單體化改造悄然興起!!

微服務一直以來是服務治理的基本盤之一,落地到云原生上,往往是每個 K8s pods 部署一個服務,獨立迭代、獨立運維。 但是在快速部署的時候,有時候,我們可能需要一些宏服務的優勢。有沒有一種方法,能夠 “既要又要” 呢?本文基于 tRPC-Go 服務,提出并最終實踐了一種經驗證…

從互聯網到云計算再到 AI 原生,百度智能云數據庫的演進

1 數據庫行業發展概述 如果說今年科技圈什么最火&#xff0c;我估計大家會毫不猶豫選擇 ChatGPT。ChatGPT 是 2022 年 11 月 30 日由 OpenAI 發布的聊天應用。它創造了有史以來用戶增長最快的紀錄&#xff1a;自 11 月 30 日發布起&#xff0c;5 天就擁有了 100 萬活躍用戶&am…

靜態HTTP和動態HTTP的混合使用:最佳實踐

在當今的互聯網環境中&#xff0c;靜態HTTP和動態HTTP各有其優勢和局限。靜態HTTP具有速度快、安全性高和易于維護的特點&#xff0c;而動態HTTP則能夠實現動態交互和處理大量動態數據。為了充分利用兩者的優勢&#xff0c;越來越多的網站開始采用靜態HTTP和動態HTTP混合使用的…

計算機的存儲規則

計算機存儲 計算機采用二進制來存儲數據和程序 原因主要有&#xff1a; (1) 物理上容易實現 (2) 運算規則非常簡單 (3) 可靠性強 (4) 易于實現邏輯運算和邏輯判斷 計算機中存儲器的分類及特點 根據存儲器在計算機系統中所起的作用 分為內存儲器和外存儲器 (1) 內存用來…

大數據畢業設計之前端02:架構布局和aside的設計

前言 上一篇主要講了我學習前端的一個經歷&#xff0c;以及為什么選擇BuildAdmin作為深入前端學習的原因.同事也大致聊了一下學習前端需要使用哪些技術棧。 本篇文章來拆解一下BuildAdmin的前端代碼結構&#xff0c;和布局實現的細節。 前端代碼結構 必須先了解項目的結構&…

leetcode每日一題37

92.反轉鏈表II 這道題需要1.找到位置left 2.在位置left開始&#xff0c;一前一后兩個指針反轉鏈表&#xff0c;代碼同206.反轉鏈表&#xff0c;直到后一個指針指向right 3.把反轉后的頭節點鏈接到left-1后面&#xff0c;把反轉后的鏈表尾節點指向right1位置的節點 因為可能會反…