之前的例子都是在VS2008上编译,现在想转到VS2005上,自然库也得重新编译。
在VS2005上使用DirectShow,首次编译发现出现以下错误:
error C2146: syntax error : missing ';' before identifier 'PVOID64'
看了很多关于这个问题的讨论,解答,无非就是改写winnt.h中的代码:
原代码:
typedefvoid*PVOID;
typedefvoid*POINTER_64PVOID64;
在这两行代码前增加:
#definePOINTER_64__ptr64
但这明显是下下之策,而且真正原因没人说的清楚。
看到一位xd,给了一种解释,是比较正确的, 如下:
POINTER_64是一个宏,在64位编译下起作用,它包含在SDK目录下的BASETSD.H中(MicrosoftVisualStudio8\VC\PlatformSDK\Include\basetsd.h(23):#definePOINTER_64__ptr64),但DXSDK自己也带了一个basetsd.h,里面没有定义POINTER_64,从而导致出错。
方法1:
在Tools->Options->ProjectsandSolutions->VC++Directories->IncludeFiles里确保系统包含目录(以S打头的)在最前面,同时在projectproperties下面的“C/C++->General”中确保“AdditionalIncludeDirectories”为空(因为它会被优先编译,这样就轮不到VC\PlatformSDK\Include\basetsd.h),所有的包含目录都应该在上面的include里面。这种方法不用改代码。
方法2:
在DXSDK自己的basetsd.h里自己定义#definePOINTER_64__ptr64
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环境中编译通过。
分享到:
相关推荐
Windows 的编译说明感谢 Andrew Kirkovski 发现这个问题:该项目是在 VS 2013 中构建的,需要在 winnt.h(大约第 340 行)中进行以下更改才能成功编译: 从: //// Void//typedef void *PVOID;typedef void * ...
分析定义和声明的变量,接着从入口处分析,最后分析其他派谴例程。 定义几个IoCtrl合并宏,并定义几个结构体:MRB结构体、分区参数表等。 NTSTATUS DriverEntry()从入口点出发,嘿嘿。 具体部分已经详细在源代码...
BOOL StackWalk64( DWORD MachineType, HANDLE hProcess, HANDLE hThread, LPSTACKFRAME64 StackFrame, PVOID ContextRecord, PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine, PFUNCTION_TABLE_ACCESS_ROUTINE...
在Microsoft Visual studio 6.0中,Microsoft的调试程序支持一个非常有用的特性,即你可以配置Watch窗口,以便始终都能向你显示线程的最后错误代码的号码和该错误的英文描述。通过选定Watch窗口中的一行,并键入“@...
并在GdiAppView.cpp中的GdiAppView构造函数和析构函数中添加如下代码: CGdiAppView::CGdiAppView():m_pbmp(0)// { // TODO: add construction code here } CGdiAppView::~CGdiAppView() { delete m_pbmp;// m_...
void的含义void即“无类型”,void *则为“无类型指针”,可以指向任何...②在ANSI C标准中,不允许对void指针进行算术运算如pvoid++或pvoid+=1等,而在GNU中则允许,因为在缺省情况下,GNU认为void *与char *一样。si
qt vs编译报错error C2146: syntax error : missing ';' before identifier 'PVOID64',替换C:\Program Files (x86)\Windows Kits\8.1\Include\um中的winnt.h文件即可
MFC中使用串口通信所包含类,实现收发数据,直接包含,打按照函数打开串口,接收,发送就好了。
提到把ZIP编译到EXE中去,发现皮肤可以加载,但是图片无法显示,目前看来是用法问题, void CPaintManagerUI::SetResourceZip(LPVOID pVoid, unsigned int len);这个函数不应该直接用, 但是不明白为什么duilib给它...
Detours是微软开发的一个函数库, 用于修改运行中的程序在内存中的影像,从而即使没有源代码也能改变程序的行为。具体用途是: 拦截WIN32 API调用,将其引导到自己的子程序,从而实现WIN32 API的定制。 为一个已在...
重载控件消息处理函数WindowProc(),在View->ClassWizard中打开类向导,在消息映射中找到WindowProc,如下图: 图五 重载WindowProc() 四、编写代码 编写VariantToLong()转换函数,该函数代码如下: //类型转换,将...
HookPortBypass 重加载内核(包括nt和win32k) 3。TEST_KIDISPAT 自分发异常(朋友帮忙实现了部分,代码主要来源WRK) ps:hookport代码抄网上的,来源http://www.m5home.com/bbs/forum.php 这套GalaxyAP工程主要...
BOOL 跨进程调用CALL(PVOID pcall地址,PVOID plst参数 ); //LoadLibraryA(dll名字指针) //MessageBeep(1) void Test远程调用MessageBeep() { 跨进程调用CALL(MessageBeep,(PVOID)0x12768); } //注入my022MFC.dll到...
>,然后到winlogon进程的空间中查找UserDomain和UserName 在WinLogon的内存空间中寻找UserName和DomainName的字符串 if ((wcscmp ((wchar_t *) RealStartingAddressP, UserName) == 0) && (wcscmp ((wchar_t *) ...
用WinDbg看了看,果然在我的机器上:0x80570e41这个在 NtOpenProcess中的区域被TesSafe.sys修改,原来这里是:80570e41 e87c8dffff call nt!ObOpenObjectByPointer (80569bc2) 系统通过ObOpenObjectByPointer来通过...
typedef struct _UNICODE_STRING { ...typedef DWORD (__stdcall *ZWMV)(HANDLE,HANDLE,PVOID,ULONG,ULONG,PLARGE_INTEGER,PSIZE_T,DWORD,ULONG,ULONG); typedef DWORD (__stdcall *ZWUMV)(HANDLE,PVOID);
比如在远程进程中你写入的参数和函数体的内存地址分别为0x00010000和0x00011000,则生成的跳转数据为 68 00 00 01 00 E8 00 10 01 00(PUSH 00010000 CALL 00011000),这样程序运行createfile函数的时候将会先运行PUSH ...
// Desc: DirectShow sample code - audio/video capture. // // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ ...
NTSTATUS SetEventHandler(PFILE_OBJECT pfoTdiFileObject,LONG InEventType, PVOID InEventHandler, PVOID InEventContext); 接收数据回调函数 NTSTATUS ClientEventReceive(PVOID TdiEventContext, CONNECTION_...
进程间通信最简单的...由于发送方在接收方处理WM_COPYDATA消息完毕前都是处于等待中,所以接收方应当尽快处理WM_COPYDATA消息。 本资源中user1需要先发送,携带有主窗口句柄,然后recv根据窗口句柄回复,详情见代码