none
验证问题:用了一个第三方的win32 dll库(zlib.dll),本地验证失败,怎么办? RRS feed

  • 问题

  • 您好:

    现有一个c代码项目core.dll,依赖zlib1.dll。我们用winrt组件corert.dll封装了一下core.dll,然后windows store app通过调用corert.dll的接口,间接使用原c代码的功能。

    以上已经走通,能成功运行。现在的问题时,我用Windows App Certification Kit本地验证,结果失败。报错如下

    发现错误: 支持的 API 测试检测到以下错误:

    • 此应用程序类型不支持 msvcrt.dll 中的 API malloc。zlib1.dll 调用此 API。
    • 此应用程序类型不支持 msvcrt.dll 中的 API memchr。zlib1.dll 调用此 API。
    • 此应用程序类型不支持 msvcrt.dll 中的 API memcpy。zlib1.dll 调用此 API。
    • 此应用程序类型不支持 msvcrt.dll 中的 API sprintf。zlib1.dll 调用此 API。
    • 此应用程序类型不支持 msvcrt.dll 中的 API strcat。zlib1.dll 调用此 API。
    • 此应用程序类型不支持 msvcrt.dll 中的 API strcpy。zlib1.dll 调用此 API。
    • 此应用程序类型不支持 msvcrt.dll 中的 API strerror。zlib1.dll 调用此 API。
    • 此应用程序类型不支持 msvcrt.dll 中的 API strlen。zlib1.dll 调用此 API。

    以上malloc,memcpy是在c里最基本的函数,而且我在自己的c代码里(core.dll)里也用了,却在验证时又没有报错。这是为什么?

    如何才能正常使用zlib1.dll 呢?

    多谢!

    2012年8月23日 9:42

答案

全部回复

  • Hi,

    能够被调用的Win32和COM API只在这个文档的范围内,或者你可以看Desktop的API,如果上买写着Desktop only就说明无法在Win8style中被调用。

    http://msdn.microsoft.com/en-US/library/windows/apps/br205757

    这样的做法也是为了安全考虑,WinRT运行在安全沙盒中。因此可能没有办法提供一个解决方案。


    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年8月24日 2:23
    版主
  • Hi,

    能够被调用的Win32和COM API只在这个文档的范围内,或者你可以看Desktop的API,如果上买写着Desktop only就说明无法在Win8style中被调用。

    http://msdn.microsoft.com/en-US/library/windows/apps/br205757

    这样的做法也是为了安全考虑,WinRT运行在安全沙盒中。因此可能没有办法提供一个解决方案。


    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.

    Hi,Aaron:

    多谢回复。

    之前我也看了这个文档。但是现在还是不太理解,像malloc,memcpy,sprintf这样基本的c函数都不支持,那么能调用Win32的API有什么意义?

    换句话说,现在我有个能运行的C代码,为了能复用它,那到底有什么办法?怎么替换掉像malloc这样的函数?

    2012年8月24日 3:55
  • Hi,

    个人认为类似malloc这种函数禁用可能是出于安全的考虑,Win8Style程序希望能够运行于安全沙盒中,通过限制API以及以一种特殊的方式提供一些类似程序间交互,设备使用,网络,文件系统这样的方式来解决安全问题。

    就我所知,基本上没有什么可能把C代码转换成Win8Style程序,即使Win8Style使用的WinRT内核是用C++构建的,但这种C++于普通的C差别非常大。因此即使是可以支持C++但是也基本不可能在其中使用这些C的函数。

    如果你想使用C++开发的话可以参考这篇:

    http://msdn.microsoft.com/en-us/library/windows/apps/hh699871.aspx


    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年8月27日 6:20
    版主
  • zlib这么常用的库应该兼容一下:(

    zlib是纯C的代码,拿过来重新编一下,兼容应该不难

    2012年8月28日 2:50
  • Hi,

    这个问题我昨晚查了一下,malloc等等函数在Win8Style程序是有可能被实现的。可能要通过Unsafe code的方式,但是这种方式虽然能够实现但是很有可能无法通过App Cert Kit的检测。


    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年8月28日 2:59
    版主