Windows Phone中使用Native Code
- 前言
Windows Phone 8 SDK中一个非常有用的特性,就是可以通过Windows Phone Runtime Component (WinPRT)使用C++代码来处理运算量大的任务。这样一来Windows Phone应用的性能会得到相应的提升,而且增加了代码的可移植性,有些使用C++写的类库也可以直接调用。WinPRT在内部封装了原生的C++代码,只暴露了用于WinRT类型的接口,从而在C#代码中方便的调用native code。WinPRT是C#代码到C++代码的中间层,调用顺序是C#->(C++/CX)->C++。C++/CX是C++代码的扩展(Visual C++ component extensions),使用C++/CX编写WinPRT来和Visual C#交互。下面就来看看WinPRT的具体使用过程。
首先添加一个WinPRT项目。

添加一个Test类,打开TestComponent.h文件添加如下的代码。
#pragma once namespace TestComponent
{
public ref class Test sealed
{
public:
bool IsTest();
};
}
这里我们创建了一个可以在其他语言环境下实例化的活跃类,通常被称为ref class。一个WinPRT可以包含多个活跃的公共类,在C#中可以通过new关键字来创建该组件下类的实例。一个活跃类必须被声明为public ref class sealed。ref关键字告诉编译器,我们正在创建一个WinPRT类型的类,sealed关键字代表该类是不可以被继承的。
打开TestComponent.cpp类,添加头文件中方法的实现。
#include "pch.h"
#include "TestComponent.h" using namespace TestComponent; bool Test::IsTest()
{
return true;
}
在其他项目中添加以上WinPRT的引用后就可以在托管代码中使用了。
private void Button_Click(object sender, RoutedEventArgs e)
{
var test = new TestComponent.Test();
var result = test.IsTest();
//
}
- 总结
上面只给出了一个非常简单的例子来描述WinPRT的使用过程,在我们具体的使用过程中会遇到很多参数类型转换的问题,即把C#类型的数据转换成在C++/CX中正确的类型。
Refernce:
Native code for Windows Phone 8
Visual C++ Language Reference (C++/CX)
Windows Phone Natives - How to Leverage Native Code on Windows Phone
Windows Phone中使用Native Code的更多相关文章
- Native code on Windows Phone 8(转)
Windows Phone 8 introduces the ability to use native code to implement Windows Phone. In this sectio ...
- 在Windows Live Writer中插入C# code
平时都是用Windows Live Writer写博客,发布博客.遇到需要插入代码都是先在notepad中写好,或者是拷贝到notepad,再从notepad中拷到Windows Live Write ...
- [原]iOS中 Web 页面与 Native Code 的一种通信方式
在 iOS 开发中,Web 页面与 Native Code 通信可以分为两个方面: 1.Native Code 调用 Web 页面的方法:主要是调用页面中的 Javascript 函数. 2.Web ...
- NDK开发历程(一):android native code的调试方法
引用:http://www.cnblogs.com/ychellboy/archive/2013/02/22/2922683.html 使用NDK在android上做开发是一件“痛并快乐着”的差事,之 ...
- java中的native方法和修饰符(转)
Java中的native修饰符 今天偶然看代码,发现别人有这样写的方法,并且jar里面有几个dll文件,比较奇怪,于是把代码打开,发现如下写法. public native String GSMMod ...
- Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)
文章目录: 1. 引子: 2. Native Application Demo 展示: 3. Native Application 简介: 4. Native Ap ...
- Java中的native方法
博客引用地址:Java中的native方法 今天花了两个小时把一份关于什么是Native Method的英文文章好好了读了一遍,以下是我依据原文的理解. 一. 什么是Native Method 简单地 ...
- Java中的native关键字与JNI
一.先说一下大致的意思: jdk提供的类库源代码中有一些方法没有实现,这些方法前有native关键字,如object类中的 : native Object clone() throws CloneNo ...
- NDK环境搭建(Native Code的编译,不需要Cygwin)
分类: android2013-06-21 15:49 475人阅读 评论(0) 收藏 举报 Android NDK 目录(?)[-] System and Software Requirements ...
随机推荐
- mysql下的常用操作
本文继 linux下安装mysql,记录下在工作中最常用的mysql语句 MySQL添加字段和删除字段 添加字段: alter table `user_movement_log`Add column ...
- 用C++实现网络编程---抓取网络数据包的实现方法
一般都熟悉sniffer这个工具,它可以捕捉流经本地网卡的所有数据包.抓取网络数据包进行分析有很多用处,如分析网络是否有网络病毒等异常数据,通信协议的分析(数据链路层协议.IP.UDP.TCP.甚至各 ...
- CLRS:Max_sunsequence_sum O(n*n) O(nlgn) O(n)
#include<stdio.h>#include<stdlib.h>#include<time.h>#define ARRAY_SIZE 1000int buf ...
- word-wrap:break-word和word-break:break-all的小小比较
个人感觉word-break:break-all;的用法比word-wrap:break-word;要好点, 当然这是出于某些需求而言,下面简单说下word-break:break-all的优点 wo ...
- JS回车事件
<script type="text/javascript"> //当回车按下时,/=47,*=42,+=43 function keypress(form0){ if ...
- 【EF学习笔记03】----------使用原生Sql语句
在EF中使用原生SQL,首先要创建上下文对象 using (var db = new Entities()) { //数据操作 } 新增 string sql = "insert into ...
- 动态设置屏幕icon
REPORT demo_dynpro_status_icons. DATA value TYPE i VALUE 1. DATA: status_icon TYPE icons-tex ...
- MySQL中的数据类型
文本 CHAR(*):最多255个字节的定长字符串,它的长度必须在创建时指定 VARCHAR(*):最多255个字节的可变长度字符串,它的长度必须在创建时指定 TEXT:最大长度为64K字符的变长文本 ...
- CentOS-6.4无线上网命令行配置
参考:http://www.vfeelit.com/504.html 待连接的WIFI的ssid为“thm”,密码为12345678,认证方式为WPA2-PSK 1. 检查无线网卡驱动是否安装 ...
- MyEclipse中使用debug调试程序
最基本的操作是: 1.首先在一个java文件中设断点,然后debug as-->open debug Dialog,然后在对话框中选类后--> Run 当程序走到断 ...