• DIRECTSHOW在VS2005中PVOID64问题和配置问题


    上次开发DirectShow还是2005年1月,整整两年,今天又重操旧业。
    这次在VS2005上使用DirectShow,首次编译发现出现以下错误:
    error C2146: syntax error : missing ';' before identifier 'PVOID64'

    看了很多关于这个问题的讨论,解答,无非就是改写winnt.h中的代码:
    原代码:

    typedef   void   *PVOID;   
      typedef   
    void   *POINTER_64   PVOID64;

    在这两行代码前增加:

    #define   POINTER_64   __ptr64

    但这明显是下下之策,而且真正原因没人说的清楚。

    看到一位xd,给了一种解释,是比较正确的, 如下:
    POINTER_64是一个宏,在64位编译下起作用,它包含在SDK目录下的BASETSD.H中(Microsoft Visual Studio 8\VC\PlatformSDK\Include\basetsd.h(23):#define POINTER_64 __ptr64),但DXSDK自己也带了一个basetsd.h,里面没有定义POINTER_64,从而导致出错。
    方法1:
    在Tools -> Options -> Projects and Solutions -> VC++ Directories -> Include Files里确保系统包含目录(以S打头的)在最前面,同时在 project properties下面的“C/C++ -> General”中确保“Additional Include Directories”为空(因为它会被优先编译,这样就轮不到VC\PlatformSDK\Include\basetsd.h),所有的包含目录都应该在上面的include里面。这种方法不用改代码。
    方法2:
    在DXSDK自己的basetsd.h里自己定义#define POINTER_64 __ptr64
    Trackback:http://hi.baidu.com/maxgoto/blog/item/fc40a86e8ec1f3da81cb4aff.html

    PVOID64问题解决后,还要对VS2005进行配置:
    先把dxsdk中提供的baseclass编译通过,用四种方式编译,会分别生成四个lib,一般只用到了其中的Debug和Release文件,
    在tool|option|vc++ directories中包含的files中设置如下。
    这里需要加入得include files有三种:
    D:\SDK\DXSDK\Include
    D:\SDK\DXSDK\Samples\C++\DirectShow\BaseClasses
    D:\SDK\DXSDK\Samples\C++\Common\Include

    在后边的library files中也需要增加三到四种的文件:
    D:\SDK\DXSDK\Lib
    D:\SDK\DXSDK\Samples\C++\DirectShow\BaseClasses\Debug
    D:\SDK\DXSDK\Samples\C++\DirectShow\BaseClasses\Release

    把以上设置好,需注意调整include file的位置,一般让platformSDK\Include位于DXSDK\Include后面,
    基本就可以将DirectShow程序在vs2005环境中编译通过。

  • 相关阅读:
    你们要的Intellij IDEA 插件开发秘籍,来了!
    【JDK 11】关于 Java 模块系统,看这一篇就够了
    《水浒传》中的物价
    读书廿一日计划
    诗词记录
    PLSQL14不识别Oracle数据库以及tnsnames.ora中配置的连接串(连接远程Oracle,本地仅安装客户端)
    框架安全之Shiro渗透
    .NET 3.5 安装
    中间件安全之Nginx渗透
    中间件安全之JBoss渗透
  • 原文地址:https://www.cnblogs.com/xiongjiaji/p/2476566.html
Copyright © 2020-2023  润新知