• 【转载】cocs2dx中c++与c#互调


    文章有参考http://www.cnblogs.com/zhxilin/archive/2013/03/20/2971331.html

    下面以接入九幽数据统计插件为例

    Step 1:如果是cocos2dx的话,每个版本不一样,比如3.6的话,已不支持wp8的,原因如下:

       WP8: remove WP8 support because Angle don't support WP8 any more

    以3.3的版本为例,直接打开proj.wp8-xaml目录下的工程文件;

    如果不是cocos2dx,那就创建一个directx and xaml 工程。

    Step 2:

    新建 文件ICallback.h,例如内容可参考如下:

    /***
    
    Code begin
    
    ***/
    
    #pragma once
    
     
    
    namespace SilverlightDirect3DInterop1Comp
    
    {
    
    [Windows::Foundation::Metadata::WebHostHidden]
    
    public interface class ICallback
    
    {
    
    public:
    
    virtual void Exec(Platform::String ^Command, Platform::String ^Param);
    
    int getOfferPoints();
    
    void startLevel(int nLevel);
    
    void failLevel(int nLevel);
    
    void filishLevel(int nLevel);
    
    };
    
    }
    
     
    
    /***
    
    Code end
    
    ***/

    Step 3:在Direct3DInterop.h文件中加入成员变量和成员函数

    public:
    
    void SetXmalCallback(ICallback^ callback){ m_globalCallback = callback; };
    
     
    
    private:
    
    ICallback^ m_globalCallback;

    Step 4:

    新建文件JiuYouCallback.cs,内容可参考如下:

    using System;
    
    using System.ComponentModel;
    
    using System.Collections.Generic;
    
    using System.Linq;
    
    using System.Net;
    
    using System.Windows;
    
    using System.Windows.Threading;
    
     
    
    using JYAnalyticsSdk;
    
     
    
    namespace SilverlightDirect3DInterop1Comp
    
    {
    
        public sealed class JiuYouCallback : ICallback
    
        {
    
            //public MainPage m_mainPage;
    
            static public int s_nOffserPoints;
    
            public void Exec(String Command, String Param)
    
            {
    
                //Execute some C# code, if you call UI stuff you will need to call this too
    
                //Deployment.Current.Dispatcher.BeginInvoke(() => { 
    
                // //Lambda code
    
                //}
    
            }
    
     
    
     
    
           public int getOfferPoints()
    
           {
    
     
    
                MessageBox.Show("jiuyou", "jiuyou", MessageBoxButton.OK);
    
          
    
               return 10;
    
           }
    
     
    
            public void startLevel(int nLevel) 
    
            {
    
     
    
                JYAnalytics.TrackEvent("startlevel", Convert.ToString(nLevel));
    
            }
    
     
    
            public void failLevel(int nLevel) 
    
            {
    
                JYAnalytics.TrackEvent("faillevel", Convert.ToString(nLevel));
    
            }
    
     
    
            public void filishLevel(int nLevel) 
    
            {
    
                JYAnalytics.TrackEvent("filishlevel", Convert.ToString(nLevel));
    
            }
    
        }
    
    }

    Step 5

    在 MainPage.xaml.cs中的找到

    private void DrawingSurface_Loaded(object sender, RoutedEventArgs e)

    在里面加入

     JiuYouCallback sCallBack = new JiuYouCallback();
    
     m_d3dInterop.SetXmalCallback(sCallBack);//这句是c#调用c++的方法

    Step 6

    前面5步已经把c++ c#互调的框架搭好了。下面测下是否成功

    在Direct3DInterop.cpp文件里添加如下

    void Direct3DInterop::OnPointerReleased(DrawingSurfaceManipulationHost^ sender, PointerEventArgs^ args)
    
    {
    
      int nPoints = m_globalCallback->getOfferPoints();
    
     
    
    }

    Step 7,运行程序,记得把弄成如下图这样测试

    Step 8

    接入九幽统计插件,参考文档《九幽数据统计插件(WP8)使用说明文档》

    Ps:

    注意命名空间要一致,否则可运行不起来哦

    比如cocos2d的,c#跟c++这边都有cocos2d

    原文链接:http://blog.csdn.net/kuovane/article/details/45723645

  • 相关阅读:
    LG5283 异或粽子
    LG2216 理想的正方形
    LG1484 种树
    洛谷3721 HNOI2017单旋(LCT+set+思维)
    洛谷3348 大森林 (LCT + 虚点 + 树上差分)
    CF1082E Increasing Frequency (multiset+乱搞+贪心)
    CF1082G Petya and Graph(最小割,最大权闭合子图)
    cf1082D Maximum Diameter Graph(构造+模拟+细节)
    洛谷3320 SDOI2015寻宝游戏(set+dfs序)(反向迭代器的注意事项!)
    CF613D Kingdom and its Cities(虚树+贪心)
  • 原文地址:https://www.cnblogs.com/clever-he/p/4513933.html
Copyright © 2020-2023  润新知