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

本文探讨了C++与C#两种语言在Windows平台下的交互方式,特别是游戏开发场景中的应用限制及解决方案。文章指出,在同一工程中C#无法直接调用C++,并提出了基于C++动态库和C#应用程序的交互方案。
摘要由CSDN通过智能技术生成

先说结论(不见得是最终正确的结论,不过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#的代码,统统放弃吧。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值