none
不同Cpu资源如何合并打包?谢谢! RRS feed

  • 问题

  • 使用Vs2012 编译C++ DLL文件

    好像无法像Metro开发一样,一次编译到 Any Cpu,只能Arm X86 X64 一样样来。

    那产生了3个DLL文件,如何打包到Metro程序里呢?

    如程序调用的时,引用的文件名是 aaa.dll,引用时需要做特别处理么?

    周末到了,希望有热心的高手解答下,因为周末还要加班赶进度,谢谢!!


    2012年9月14日 10:54

答案

  • Hi,

    C++编译无法编译any cpu是因为不是编译的托管语言,而是native语言。因此当你c#写程序的时候,引用比如x86编译出的dll那么就只能在x86下能够使用。

    c++在Win8Style跟普通c++并不同,你可以选择将c++编译成.winmd那么在c#中可以直接添加reference引用之后直接使用。如果要是编译成dll的话则需要p/invoke你可以到这个网站上去看看具体用法:

    http://www.pinvoke.net/

    换句话说,你c++编译成dll就需要使用p/invoke而且需要注意API的使用限制,但编译成winmd则不需要这样(但这个只能运行在WinRT内核)。

    但是这样也无法使你的程序能够一个版本在所有的平台下使用(因为里面包含了C++代码),而且也没有办法通过某种方式把它变成一个project,唯一的方法就是制作三个版本(x86,x64,ARM)然后上传商店,商店会根据用户版本选择一个提供给用户的。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2012年9月17日 6:23
    版主

全部回复

  • 高手来看看啊
    2012年9月17日 4:16
  • Hi,

    C++编译无法编译any cpu是因为不是编译的托管语言,而是native语言。因此当你c#写程序的时候,引用比如x86编译出的dll那么就只能在x86下能够使用。

    c++在Win8Style跟普通c++并不同,你可以选择将c++编译成.winmd那么在c#中可以直接添加reference引用之后直接使用。如果要是编译成dll的话则需要p/invoke你可以到这个网站上去看看具体用法:

    http://www.pinvoke.net/

    换句话说,你c++编译成dll就需要使用p/invoke而且需要注意API的使用限制,但编译成winmd则不需要这样(但这个只能运行在WinRT内核)。

    但是这样也无法使你的程序能够一个版本在所有的平台下使用(因为里面包含了C++代码),而且也没有办法通过某种方式把它变成一个project,唯一的方法就是制作三个版本(x86,x64,ARM)然后上传商店,商店会根据用户版本选择一个提供给用户的。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2012年9月17日 6:23
    版主
  • Hi,

    C++编译无法编译any cpu是因为不是编译的托管语言,而是native语言。因此当你c#写程序的时候,引用比如x86编译出的dll那么就只能在x86下能够使用。

    c++在Win8Style跟普通c++并不同,你可以选择将c++编译成.winmd那么在c#中可以直接添加reference引用之后直接使用。如果要是编译成dll的话则需要p/invoke你可以到这个网站上去看看具体用法:

    http://www.pinvoke.net/

    换句话说,你c++编译成dll就需要使用p/invoke而且需要注意API的使用限制,但编译成winmd则不需要这样(但这个只能运行在WinRT内核)。

    但是这样也无法使你的程序能够一个版本在所有的平台下使用(因为里面包含了C++代码),而且也没有办法通过某种方式把它变成一个project,唯一的方法就是制作三个版本(x86,x64,ARM)然后上传商店,商店会根据用户版本选择一个提供给用户的。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    感谢指点!其实我之前想,若是C#能够根据Cpu来预编译就好了,把3个DLL都打包进去,根据Cpu来引用不同DLL,不知Metro支持不?

    C#是支持预编译的,但我的这个需求不知能否满足?

    2012年9月17日 6:26
  • Hi,

    你可以这样做,在runtime时候使用不同的dll会无法通过WACK的检测。

    因此需要使用在create app package的时候让vs来替你去生成不同版本的,具体可以看看这个帖子:

    http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/526c92f9-5d2a-4375-92eb-1a4d2ab5328c


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年9月17日 7:38
    版主