Cocos2d-x项目移植到WP8系列之六:C#工程使用C++的DLL
原文链接: http://www.cnblogs.com/zouzf/p/3984510.html
此时,一些大问题都被解决后,整个工程基本能跑起来了,最后一个大问题是:业务层是用Lua开发的,底层的源码对他们是不可见的,也就是需要把我们工程生成的各种DLL、lib、winmd文件拿出来然后再搭建一个开发环境给项目组使用,要求就是,每次底层改了什么只需要把对应的生成的lib、dll、winmd文件给他们替换就行了,而他们的开发环境里工程并不需要因此而变。嗯,但我们的工程大部分都是C++的,有DLL工程,也有lib工程,还有运行时工程,如何让C#用上这些工程的生成品?
原本我们的工程结构是这样的:C#工程 -> C++运行时工程 -> 我们的C++工程 -> Cocos的C++工程(如libCocos2d、libLua 、libCocosDenshion等),这里的工程的源代码对于业务层都是不可见的,只是把这些工程的生成结果如 lib、dll、winmd 文件给业务层使用,为什么C#工程对业务层也是不可见的呢?因为很多平台相关的功能是放到C#工程里实现的。
恩,我们加多一个C#工程,内容非常简单,简单到如果不需要做其他事情的甚至只有一句话:
NavigationService.Navigate(new Uri("/HelloCpp_PhoneLib;component/MainPage.xaml",UriKind.RelativeOrAbsolute));
是的,它只需要跳转到另一个C#工程(平台相关的功能在这个C#工程实现),现在,对我们而言,工程结构如下: C#页面工程(可以作为启动工程即可) -> C#库类工程 ->C++运行时工程 -> 我们的C++工程 -> Cocos的C++工程, 当然,对业务层而言,工程结构如何: C#页面工程 + DLL文件 + winmd文件,是的,这有一个工程。
那么,C#页面工程如何把各种C++工程的DLL、winmd、lib文件添加进去呢?
首先,把C#类库生成的DLL文件、C++运行时工程生成的DLL和winmd文件、C++动态库工程生成的DLL文件都拷到C#页面工程的根目录下,然后,
对于C#类库工程,它们生成DLL文件:C#页面工程通过工程里的 引用 -> 右键选择 添加引用 -> 浏览 ,选择中所需的DLL文件加入引用即可;
对于C++的运行时工程,它们生成DLL文件和winmd文件:C#页面工程通过工程里的 引用 -> 右键选择 添加引用 -> 浏览 ,选中所需的winmd文件加入引用即可,对应的DLL文件不需要理会;
对于C++的dll工程,它们生成DLL文件(如果生成有lib文件,不需要管):选择工程,右键 选择 添加 -> 现有项,选中所需的DLL文件加入工程即可;
对于C++的lib工程,它们只生成lib文件:lib文件不需要其他操作,lib工程的内容都被引用它的DLL工程所包含了;
至此,给业务层用的开发环境搭建好了。
PS:有种情况如下:F类在工程A里定义了,工程B引用了工程A,然后使用F类,编译没问题,但链接时却报错说 F类及它的方法 是未定义的外部符号,嗯,这个时候就应该检查一下工程A是不是DLL工程了,如果是的话,在F类前面加上: __declspec(dllexport) , 应该就可以解决问题了。特别是在其他平台下是静态库的工程,到了wp8平台却变成了动态库工程,记得加上。这坑略坑~~
原文链接: http://www.cnblogs.com/zouzf/p/3984510.html
Cocos2d-x项目移植到WP8系列之六:C#工程使用C++的DLL的更多相关文章
- Cocos2d-x项目移植到WP8系列之二:开篇
原文链接: http://www.cnblogs.com/zouzf/p/3970130.html 开发环境一笔带过吧,主板和CPU要支持虚拟化技术,要开启才行,装个64位win8.1系统,win8不 ...
- Cocos2d-x项目移植到WP8系列之三:C++和C#的交互
原文链接: http://www.cnblogs.com/zouzf/p/3971021.html 上一篇提到工程使用 XAML 和 Direct3D 项目模板 是因为要涉及到C++和C#的交互,微软 ...
- Cocos2d-x项目移植到WP8系列之一:前传
原文链接: http://www.cnblogs.com/zouzf/p/3969993.html 许久没动笔了,随想一直都有动笔的想法,但拖来拖去,归根到底还是一个懒字吧 .发现人的惰性真是太强大了 ...
- Cocos2d-x项目移植到WP8系列之九:使用自定义shader
本文原链接:http://www.cnblogs.com/zouzf/p/3995132.html 有时候想得到一些例如灰度图等特殊的渲染效果,就得用到自定义shader,关于shader的一些背景知 ...
- Cocos2d-x项目移植到WP8系列之八:CCLabelTTF显示中文不换行
原文链接: http://www.cnblogs.com/zouzf/p/3985330.html 在wp8平台上,CCLabeTTF显示中文不会自动换行,看了下源码,原来底层的实现是根据text的空 ...
- Cocos2d-x项目移植到WP8系列之四:文件操作
原文链接: http://www.cnblogs.com/zouzf/p/3972457.html 读写文件Cocos已经用fopen fwrite来做好了,这里说的主要是文件和文件夹的创建.删除.判 ...
- Cocos2d-x项目移植到WP8系列之七:中文显示乱码
原文链接:http://www.cnblogs.com/zouzf/p/3984628.html C++和C#互调时经常会带一些参数过去例如最常见的字符串,如果字符串里有中文的话,会发现传递过去后变成 ...
- Cocos2d-x项目移植到WP8系列之五:播放MP3
原文链接: http://www.cnblogs.com/zouzf/p/3972549.html 这一块的细节还是不太了解,只是东凑西拼能跑起来而已 1.网上下载lamb库 生成需要的lib库,详情 ...
- Cocos2d-x项目移植到WP8小记
Cocos2d-x项目移植到WP8小记 作者: K.C. 日期: 10/24/2013 Date: 2013-10-24 00:33 Title: Cocos2d-x项目移植到WP8小记 Tags: ...
随机推荐
- 在eclipse中使用枚举简单类型enum
在JAVA中终于可以使用枚举类型了,就像在C或C++使用的简单枚举. 首先就在eclipse中试试它吧. 没想到,却报了错误.我装了jdk1.5(5.0),也在eclipse中设置了,怎么会不认识en ...
- oracle em手动配置
转载自:http://www.cnblogs.com/sopost/archive/2010/08/14/2190098.html 用emca配置em emca是一个命令提示符,使用格式和方法在命令提 ...
- supervisor 与 yii定时任务
https://www.jianshu.com/p/9abffc905645 https://www.cnblogs.com/ajianbeyourself/p/5534737.html https: ...
- 【Python】Python获取命令行參数
有时候须要用同一个Python程序在不同的时间来处理不同的文件,此时假设老是要到Python程序中去改动输入.输出文件名称.就太麻烦了. 而通过Python获取命令行參数就方便多了.以下是我写得一个小 ...
- (分享)Linux服务器如何防止中木马
大家的windows机器可能经常装一些杀毒软件或者什么的来防止中毒,然而在Linux上我们应该怎么防止这些呢? 在面试过程中我们也经常遇到该类问题,那么我们应该怎么回答才显得既有逻辑又有深度呢? 首先 ...
- 通过w3c方式 读取xml内容
/** * 通过w3c方式 读取xml内容 * @param lablenames 要读取的节点名称 * @param file_path_name 文件绝对路径 * @return */ publi ...
- hdu5646(数学)
小学数学,脑补 一开始看到这题,猜了个规律想写但是我是拒绝的. 因为我无法证明. 好吧,主要还是小学数学没学好吧. 要理解这题,首先得搞懂一个重要问题.假设C=A+B,怎样选择两个正整数使得A*B最大 ...
- Springboot中jar 重复冲突 导致 静态资源加载问题!
这个jar 其实在common 中也是存在的 ,当时没注意看,就导入进来了,然后 css js 等一些静态资源全部不能加载!具体原因我没去深挖!后面找个时间深挖下,先填坑!
- Springboot 热部署中存在冲突的问题
SpringBoot热部署有2中: 1.使用 Spring Loaded 2.使用 spring-boot-devtools 具体怎么用.自己百度! 在使用第一种时候,整合SpringBoot和通用M ...
- es 中 for in for of
arr=[11,22,33,44,55,66,77,88]for (const i in arr){ console.log(i) if (i===4){ console.log(arr[i]) }} ...