`
473687880
  • 浏览: 486386 次
文章分类
社区版块
存档分类
最新评论

关于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#的代码,统统放弃吧。


分享到:
评论

相关推荐

    c/c++ windows ble 蓝牙操作

    c/c++ windows 通过winrt操作ble 蓝牙 #include #include #include <winrt/Windows.Foundation.h> #include <winrt/Windows.Foundation.Collections.h> #include <winrt/Windows.Devices.Bluetooth.h> #include ...

    windows RT开发笔记_WinRT DLL及其调用研究

    在Windows Store app中如何复用传统Win32 dll

    AutoCompleteBox:适用于WinRT的AutoCompleteBox(C#和XAML)

    在C#和XAML中构建Windows应用商店应用程序时,没有可以使用的AutoCompleteBox控件,所以我决定创建一个,因为我在项目中需要它。 当前,它仅支持String集合,并且必须使用后面的代码访问选定的值,但这有望改变。 ...

    解决WinRT 8.1重新上架后的续航问题.docx

    解决WinRT 8.1重新上架后的续航问题.docx

    ComponentOne Studio for WinRT XAML 8.1 2014 V3

    ComponentOne Studio for WinRT XAML 简单易学,功能全面,WinRT XAML 顶级用户界面开发控件套包; ComponentOne Studio for WinRT XAML 新增的界面呈现控件专为数据可视化、布局、输入以及更多用途而设计。源于...

    win8 metro 调用 winRT dll (包括C文件和cpp文件)

    C文件的函数 不能直接调用需要借助cpp文件

    WinRT 环境下缺失 Windows API 模拟实现

    WinRT 环境下很多API没有了,比如socket相关的WSASocket,WSAConnect,线程相关的CreateThread等等,导致很多库不能使用,比如boost,基于这些库的应用如果要移植到WinRT环境下,将不得不修改很多代码,甚至需要重新...

    Mastering Windows 8 C++ App Development

    Leveraging modern C++ and the new Windows Runtime, this book guides you through the many facets of WinRT whilst using modern C++ features for ultimate power and performance. "Mastering Windows 8 C++...

    CsWinRT:Windows运行时的C#语言投影

    C#/ WinRT投影隐藏了C#和WinRT接口之间的互操作的详细信息,并提供了许多WinRT类型到适当的.NET等效项的映射,例如字符串,URI,公共值类型和泛型集合。 WinRT API以*.winmd格式定义,并且C#/ WinRT包含生成C#...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    20.1 在C#中使用WinRT库 586 20.1.1 具有自定义Add Remove处理程序的WinRT事件 586 20.1.2 自动变换的接口 587 20.1.3 基于任务的异步 587 20.2 平台调用 588 20.2.1 外部函数的声明 588 ...

    Apress.WinRT.Revealed.Jun.2012

    WinRT Revealed, 该书详细介绍Windows Runtime原理以及开发技巧和资源。适合Windows 8开发人员参考阅读。

    Essential C# 5.0-Englis

    embedded metadata, reflection, and attributes* Thoroughly mastering multithreading and synchronization, including the new async/await paradigm* Discussion of WinRT and programming in C# for Windows 8...

    WinRT.揭秘

    开发windows phone 8必备的书籍,权威、全面的帮助你掌握windows phone 8.

    如何从.NET桌面应用程序调用WinRT API

    介绍如何创建在Windows 8上调用WinRT API的.NET应用程序。

    winrt-via-csharp代码

    C#学习利器,winrt-via-csharp 2014的所有源代码。欢迎下载并且实践

    UWP中重用C/C++代码时踩过的一些坑

    标题中提到的UWP,主要是指用C#来写UWP的主工程,开发过程中可能需要...我们主要通过WinRT来打通C#和C/C++之间的调用,因此,我们的选择应是前两种路线。前两种路线的区别在于,一个直接用原有代码创建了一个WinRT,另

    vlc-winrt-master.zip

    VLC for the Windows Store Environment, Windows Phone

    ComponentOne Studio for WinRT XAML2012 v3

    ComponentOne Studio for WinRT XAML2012 v3 Powerful WinRT XAML controls for building better Windows Store apps. Powerful UI and Data Visualization Controls for the Windows Store Get UI controls ...

    解决WinRT 8.1升级适配器电源策略移植问题.pdf

    在升级过程中,无线适配器电源策略并没有迁移到新环境,而是被设置为了默认的策略(不正确的设置),这样在使用或是联机待机时会消

    WinRT Metro 日期选择控件

    可以实现日期选择功能,有winphone,iphone等多种样式可供选择。...使用时可以在你的项目中引用DatePicker文件夹,具体用法可以参考我在http://blog.csdn.net/f10_s/article/details/10404025上写的。

Global site tag (gtag.js) - Google Analytics