none
关于新API在老版本中的问题! RRS feed

  • 问题

  • 做了一个DLL,里面包一个在VISTA和WIN7下才能用的API,发布后在XP等老系统下用,加载DLL会失败,如何解决哦,当然 老系统下是不会使用这个API的只是这个DLL 在老系统下 使用 LoadLibrary 会返回错误,提示找不到DLL,只有把那个调用的API删除才行,杂个解决呢,我主要是不想发布两个DLL 和 显示加载那个新的API。。。
    …|▌'寔堅蔃の/「≯還寔╪.逞蔃﹖
    2010年11月24日 14:01

答案

  • 你好,

    1、你可以把此API封装在一个DLL里,你可以对尝试对此DLL进行Delay Load http://msdn.microsoft.com/en-us/library/151kt790.aspx,这样即便是隐式加载时如果这个API不被执行时,这个DLL是不会被加载的

    2、你只需要显式的加载这个API,在DLL里判断版本号选择是否调用此API。

    3、或者,你可以为不同版本的windows写两个DLL和两个主程序,再写个程序根据windows版本来选择启动那个主程序。

    Yi


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    • 已标记为答案 dowflyon 2010年11月29日 5:12
    2010年11月26日 9:56
    版主

全部回复

  • 判断一下系统

    如果系统版本过低不加载这个dll不就好了

    2010年11月25日 1:09
  • 没法!隐式加载我们咋控制让他加载不加载!!,恼火!
    …|▌'寔堅蔃の/「≯還寔╪.逞蔃﹖
    2010年11月25日 12:39
  • 你好,

    1、你可以把此API封装在一个DLL里,你可以对尝试对此DLL进行Delay Load http://msdn.microsoft.com/en-us/library/151kt790.aspx,这样即便是隐式加载时如果这个API不被执行时,这个DLL是不会被加载的

    2、你只需要显式的加载这个API,在DLL里判断版本号选择是否调用此API。

    3、或者,你可以为不同版本的windows写两个DLL和两个主程序,再写个程序根据windows版本来选择启动那个主程序。

    Yi


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    • 已标记为答案 dowflyon 2010年11月29日 5:12
    2010年11月26日 9:56
    版主
  • 你好,

    1、你可以把此API封装在一个DLL里,你可以对尝试对此DLL进行Delay Load http://msdn.microsoft.com/en-us/library/151kt790.aspx,这样即便是隐式加载时如果这个API不被执行时,这个DLL是不会被加载的

    2、你只需要显式的加载这个API,在DLL里判断版本号选择是否调用此API。

    3、或者,你可以为不同版本的windows写两个DLL和两个主程序,再写个程序根据windows版本来选择启动那个主程序。

    Yi


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.


    没错

    这类问题确实可以通过延迟加载技术解决

    2010年11月27日 0:49