C#盯桦,C++慈俯,OC混編大集合

前言

用游戲引擎開發(fā)的項目都是跨平臺的,在此拥峦,Android平臺暫且不提贴膘,因為java代碼的不熟悉以及未大量嘗試,所以不涉及到Android平臺略号,這里著重強調(diào)Unity,Cocos兩個引擎與oc,或c++做混編刑峡。
Unity開發(fā)語言 C#
Cocos開發(fā)語言 c++

Cocos引擎

說道混編,我們還是先來說說原生開發(fā)玄柠。IOS的原生開發(fā)是OC突梦,目標平臺是xcode。
oc語言是c的超集羽利,也就是說他既繼承了C宫患,也在之上做了大量的拓展。
這就奠定了OC能與C这弧,C++做混編的基礎(chǔ)娃闲。

我們既然談到Xcode編譯器虚汛,那么我想這個知識點大家必須要知道。

  • 補充:混編就是我寫我的代碼皇帮,你寫你的代碼卷哩,做個橋梁調(diào)用彼此
  • 源文件必須以.mm文件作為xcode object c++的擴展
  • 這里我解釋下,.m .cpp文件在不混編的情況下存在是肯定的属拾,但是要把這兩者都兼容将谊,譬如兩者調(diào)用,就需要.mm文件了渐白,所有語言的橋接代碼源文件都是.mm 其實就是相當(dāng)于.cpp

cocos比unity開發(fā)簡單瓢娜,一個好處在于他可以直接在xcode里面編譯C++代碼。這意味著你可以隨時修改代碼重新編譯礼预。unity的等會再談眠砾。
我們剛才說過oc是c的超集,c++更不用說托酸,所以他們唯一的交互點就是c褒颈。結(jié)合上一節(jié)說的IOS上架之socket IPV6兼容問題里面有個oc源碼,我們就拿這個練手

C++肯定是想調(diào)用C++的代碼励堡,所以橋接我用C++方法去調(diào)用oc方法谷丸。

//ObjectHelper類下的getHostIp C++方法
const char* ObjectHelper::getHostIp(std::string hostip)
{
    //將string 轉(zhuǎn)成 NsString
    NSString *stroc = [NSString stringWithCString:hostip.c_str()
                                         encoding:[NSString defaultCStringEncoding]];
    //我把oc的這個方法寫了一個sign類,當(dāng)類方法
    NSString* str =[sign getIPWithHostName:stroc];
    return [str UTF8String];
}

這里其實唯一要注意的是數(shù)據(jù)的處理应结,所以用通用的const char*作為string 去傳遞數(shù)據(jù)刨疼。 其他的大體一樣。
getIPWithHostName:stroc 這個方法在上一篇文章里面有鹅龄,我就不多講了揩慕。
這個ObjectHelper類 當(dāng)然是.h .mm源文件格式。

  • 再次申明 扮休,其實.mm完全可以理解成.cpp這種形式

Unity引擎

  • Unity 一般用C#開發(fā)迎卤,所以這里做C++ 和OC的橋接
  • C#和C的關(guān)系我也不說了,看字面上就能猜(好吧玷坠,其實我是不知道)但是不影響我們?nèi)グ凑誄方式寫代碼

C#和C++

  • 先說動態(tài)庫調(diào)用蜗搔,也就是在C#中調(diào)用C++的DLL,DLL分兩種方式托管模式和非托管模式八堡。
  • 托管模式:這種模式更多人推薦樟凄,因為C#能直接調(diào)用其對象,然后去訪問C++函數(shù)兄渺。其實不然缝龄,在復(fù)雜的庫(譬如我之前在git上找到的跨平臺的midi庫)面前,編譯都沒法成功。這里解釋下二拐,如果你能編譯成功那么你當(dāng)然是可以使用服鹅。
  • 非托管模式:暴露extern "C" 的函數(shù)接口用來調(diào)用。這種模式使用起來很繁瑣百新,但是思維很簡單

這兩種模式的實現(xiàn)其實都有很多教程企软,在這里我就不一一贅述了。
關(guān)鍵詞:unity調(diào)用C++DLL

C#和OC

如果是IOS平臺下饭望,其實完全沒必要用DLL仗哨。
之前的MIDI方案就是如此。

  • 用到的機制是Unity自帶的Plugins铅辞。

Plugins下的IOS文件能放.m .mm等文件厌漂,當(dāng)項目發(fā)布到Xcode上,作為文件去編譯斟珊。那么調(diào)用C++也好OC苇倡,也好都能用cocos那種方式去調(diào)用也就是在xcode里面用.mm橋接,用非托管模式去暴露接口然后調(diào)用囤踩。

extern "C"
{
    void MIDIinit()
    {
        if(!rtmidi)
            rtmidi =new RtMidiIn();
    }
    
    void Connet(int num)
    {
        rtmidi->openPort(num);
        rtmidi->setCallback(&mycallback);
    }
    int getConnetNub()
    {
        return rtmidi->getPortCount();
    }
}

當(dāng)然如果不是在OC平臺還是要以調(diào)用DLL去訪問C++代碼旨椒。
模式無非是托管和 非托管。

忘了說C#里面如何調(diào)用了

    [DllImport("__Internal")]
    private static extern int getConnetNub();

.mm文件和.m文件放在Plugins/IOS 下堵漱,這是個特殊文件夾综慎,無法再編輯器里面直接運行 ,需要發(fā)布Xcode之后勤庐,真機測試示惊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市愉镰,隨后出現(xiàn)的幾起案子米罚,更是在濱河造成了極大的恐慌,老刑警劉巖岛杀,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阔拳,死亡現(xiàn)場離奇詭異,居然都是意外死亡类嗤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門辨宠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遗锣,“玉大人,你說我怎么就攤上這事嗤形【ィ” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長笔咽。 經(jīng)常有香客問我搔预,道長,這世上最難降的妖魔是什么叶组? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任拯田,我火速辦了婚禮,結(jié)果婚禮上甩十,老公的妹妹穿的比我還像新娘船庇。我一直安慰自己,他們只是感情好侣监,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布鸭轮。 她就那樣靜靜地躺著,像睡著了一般橄霉。 火紅的嫁衣襯著肌膚如雪窃爷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天姓蜂,我揣著相機與錄音吞鸭,去河邊找鬼。 笑死覆糟,一個胖子當(dāng)著我的面吹牛刻剥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滩字,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼造虏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了麦箍?” 一聲冷哼從身側(cè)響起漓藕,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挟裂,沒想到半個月后享钞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡诀蓉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年栗竖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渠啤。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡狐肢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沥曹,到底是詐尸還是另有隱情份名,我是刑警寧澤碟联,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站僵腺,受9級特大地震影響鲤孵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辰如,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一普监、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丧没,春花似錦鹰椒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至夺饲,卻和暖如春奸汇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背往声。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工擂找, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浩销。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓贯涎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親慢洋。 傳聞我的和親對象是個殘疾皇子塘雳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容