• 关于WinRT中c++和c#相互调用的问题


            先说结论(不见得是最终正确的结论,不过google了一晚上也没有查出个所以然来,即便有解决方法我也认为是微软傻x):

            首先c#和c++理所应当的不应该在同一个工程中,而只能是同一个工程的两个项目。只能是c++调用c#,而c#不能调用c++。(细节后面再说)。也就是说,唯一的交互途径就是创建一个基于c#的应用程序,然后再创建一个c++的动态库,让c#调用c++的代码。 

           这个方案也就是c++ d3d+xaml的解决方案。用d3d来实现渲染,xaml(c#)来实现ui和上层逻辑。

          如果你的游戏是基于d3d+xaml的解决方案的话,那么c++代码中还是可以调用到c#的,就是实现一个ICallback的接口,然后c#代码中注册给c++。这里依赖两件事情,一个是c#可以调用c++代码,一个是程序是基于c#的,也即有合适的实际可以在c#中注册Callback给c++。

          如果你的游戏是基于native c++(纯c++框架)的,那么很遗憾,你将无法使用现有的c#的库。(WinRT不允许使用CLI,最后一个途径也被封死了。。。)

         我就不明白了,java都可以跟c++进行交互,那么c++调用c#的代码咋就那么难呢?传说是因为效率因素,我去,效率与否是使用者说了算的,功能都实现不了了谈什么效率???

         如果你认为这个无关紧要,那么我就列举两个让我恶心到家的功能吧:

         1、使用native c++无法分析内存,一、没有合适的工具(只有xaml框架的程序才能使用profile里面的内存分析),二、显示内存占用的代码是c#的,无法在c++下进行调用。这样我的游戏在wp8下的运行情况只能祈求上苍了。 而且微软还恶心的默认只给程序分配150mb内存,即便手机有1g内存,超过150mb也会提示无法分配内存,这样我只有两个选择一是明确抛弃低端机器,lumia520什么的都去死吧,这是为了能够在lumia920上面正常运行所做的牺牲。 二是认为自己优化的到位了,但是如果万一游戏运行时占用的内存超过150mb那么520和920两个难兄难弟一起挂(共产主义精神)


         2、友盟的统计分析sdk无法使用。基本上现在大多数第三方sdk都是c#的代码,统统放弃吧。


  • 相关阅读:
    关于Servelet在Tomcat中执行的原理
    类变量被final修饰编译时结果确定变为宏
    本地无法连接远程服务器(Host is not allowed to connect to this MySQL server)解决办法(Windows)
    leetcode_227. 基本计算器 II
    leetcode_150. 逆波兰表达式求值
    leetcode_145. 二叉树的后序遍历
    leetcode_144. 二叉树的前序遍历
    leetcode_94. 二叉树的中序遍历
    leetcode_71. 简化路径
    1598. 文件夹操作日志搜集器
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3367730.html
Copyright © 2020-2023  润新知