zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Python的注释
    Python的优缺点
    pymysql模块
    python(pymysql操作数据库)
    面向对象的测试用例设计有几种方法?如何实现?
    请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。
    什么是兼容性测试?请举例说明如何利用兼容性测试列表进行测试。
    当开发人员说不是BUG时,你如何应付?
    性能测试的流程?
    您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)
  • 原文地址:https://www.cnblogs.com/zouzf/p/3984510.html
Copyright © 2011-2022 走看看