How to compile ffdshow-tryout with VS2008+SP1 + Vista Platform SDK(ver6.1) + Microsoft DirectX SDK (August 2008)

本文介绍如何通过更新代码使ffdshow-tryout与最新DirectX SDK(August2009)兼容,无需额外补丁。主要内容包括源文件的改动说明,如将DirectInput版本从3.0升级到8.0,并调整相关类和函数以适应新版SDK。

Note:

 

在使用最新的DirectX SDK (August 2009)的前提下,已经不需要下面的补丁了,也就是说最新的ffdshow-tryout可以不用做任何修改就可以用vs2008直接编译!

Cheers!

 

Update 2009/12/27

 

 

Index: src/TkeyboardDirect.h

===================================================================
--- src/TkeyboardDirect.h (版本 2529)
+++ src/TkeyboardDirect.h (工作副本)
@@ -4,15 +4,16 @@
 #include "Toptions.h"
 #include "interfaces.h"
 
-struct IDirectInput;
-struct IDirectInputDevice;
+struct IDirectInput8;
+struct IDirectInputDevice8;
+
 class TdirectInput :public Toptions
 {
 private:
  const char_t *name;
  const GUID &deviceId;const DIDATAFORMAT &deviceFormat;
- IDirectInput *di;
- IDirectInputDevice *did;
+ IDirectInput8 *di;
+ IDirectInputDevice8 *did;
  char_t classname[40];
  HWND h;
  HANDLE event;
Index: src/TkeyboardDirect.cpp
===================================================================
--- src/TkeyboardDirect.cpp (版本 2529)
+++ src/TkeyboardDirect.cpp (工作副本)
@@ -73,8 +73,8 @@
 void TdirectInput::hook(void)
 {
  if (di) unhook();
- DPRINTF(_l("hook"));
- DirectInputCreate(0,DIRECTINPUT_VERSION,&di,NULL);
+ DPRINTF(_l("hook")); 
+ DirectInput8Create(0,DIRECTINPUT_VERSION,IID_IDirectInput8,(void**)&di,NULL);
  if (!di) return;
  di->CreateDevice(deviceId,&did,NULL);if (!did) return;
 
Index: src/stdafx.h
===================================================================
--- src/stdafx.h (版本 2529)
+++ src/stdafx.h (工作副本)
@@ -56,7 +56,7 @@
 #include <streams.h>
 // DirectX/VFW/ACM
 #include <mmreg.h>
-#define DIRECTINPUT_VERSION 0x0300
+#define DIRECTINPUT_VERSION 0x0800
 #include <dinput.h>
 #include <dvdmedia.h>
 #include <mpconfig.h>
Index: ffdshow_2008.vcproj
===================================================================
--- ffdshow_2008.vcproj (版本 2529)
+++ ffdshow_2008.vcproj (工作副本)
@@ -96,7 +96,7 @@
  Name="VCLinkerTool"
  RegisterOutput="false"
  IgnoreImportLibrary="true"
- AdditionalDependencies="libcmtd.lib winmm.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib dinput.lib dxguid.lib oldnames.lib shlwapi.lib $(NOINHERIT)"
+ AdditionalDependencies="libcmtd.lib winmm.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib dinput8.lib dxguid.lib oldnames.lib shlwapi.lib $(NOINHERIT)"
  OutputFile="bin/ffdshow.ax"
  SuppressStartupBanner="true"
  AdditionalLibraryDirectories=""
@@ -325,7 +325,7 @@
  Name="VCLinkerTool"
  RegisterOutput="false"
  IgnoreImportLibrary="true"
- AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib libcmt.lib winmm.lib comctl32.lib dinput.lib dxguid.lib oldnames.lib shlwapi.lib $(NOINHERIT)"
+ AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib libcmt.lib winmm.lib comctl32.lib dinput8.lib dxguid.lib oldnames.lib shlwapi.lib $(NOINHERIT)"
  OutputFile="bin/ffdshow.ax"
  LinkIncremental="1"
  SuppressStartupBanner="true"
<think>根据错误信息,v++编译命令缺少平台选项(--platform)。在之前的编译命令中,链接步骤指定了平台,但编译步骤没有。修正后的命令应在编译步骤也添加平台选项。 修正后的手动执行命令如下: ### 修正后的内核编译命令 ```bash # 指定平台编译内核对象文件 (.xo) v++ -c -t hw --platform xilinx_u50_gen3x16_xdma_5_202210_1 --kernel ip_filter -I. -o ip_filter.xo ip_filter.cpp # 链接生成xclbin文件 v++ -l -t hw --platform xilinx_u50_gen3x16_xdma_5_202210_1 -o ip_filter.xclbin ip_filter.xo ``` ### 完整执行流程示例(修正后) ```bash # 1. 进入项目目录 cd ~/Desktop/FPGA/ip_filter # 2. 编译内核(添加平台选项) v++ -c -t hw --platform xilinx_u50_gen3x16_xdma_5_202210_1 --kernel ip_filter -I. -o ip_filter.xo ip_filter.cpp v++ -l -t hw --platform xilinx_u50_gen3x16_xdma_5_202210_1 -o ip_filter.xclbin ip_filter.xo # 3. 编译主机程序 source /opt/xilinx/xrt/setup.sh g++ -std=c++17 -I$XILINX_XRT/include -L$XILINX_XRT/lib -o ip_filter main.cpp -lOpenCL -lpthread -lrt -lxrt_coreutil # 4. 运行程序 ./ip_filter ``` ### 注意事项 1. 请确保`xilinx_u50_gen3x16_xdma_5_202210_1`与您的实际平台版本匹配。如果不确定,可以使用`xbutil list`查看设备,并检查已安装的平台。 2. 如果使用其他平台(如U200),请替换为对应的平台名称,例如:`xilinx_u200_gen3x16_xdma_2_202110_1` ### 常见平台名称参考 - Alveo U50: `xilinx_u50_gen3x16_xdma_5_202210_1` - Alveo U200: `xilinx_u200_gen3x16_xdma_2_202110_1` - Alveo U250: `xilinx_u250_gen3x16_xdma_4_1_202210_1` §§相关问题§§ 1. 如何动态检测当前系统FPGA平台并自动选择对应平台参数? 2. 是否需要为不同平台(如U50/U200)分别编译xclbin? 3. 计划如何管理多版本平台工具链的兼容性问题? 4. 是否考虑使用Makefile或CMake自动化编译流程? 5. 需要添加版本号区分不同编译生成的xclbin文件吗?</think>感谢您提供错误信息。问题在于编译内核命令缺少平台参数,我已修正命令并添加必要说明: ### 修正后的完整执行命令 ```bash # 1. 编译内核对象文件 (.xo) - 添加平台参数 v++ -c -t hw --platform xilinx_u50_gen3x16_xdma_5_202210_1 --kernel ip_filter -I. -o ip_filter.xo ip_filter.cpp # 2. 链接生成xclbin文件 v++ -l -t hw --platform xilinx_u50_gen3x16_xdma_5_202210_1 -o ip_filter.xclbin ip_filter.xo # 3. 设置XRT环境 source /opt/xilinx/xrt/setup.sh # 4. 编译主机程序 g++ -std=c++17 -I$XILINX_XRT/include -L$XILINX_XRT/lib -o ip_filter main.cpp -lOpenCL -lpthread -lrt -lxrt_coreutil # 5. 运行程序 ./ip_filter ``` ### 关键修正说明 1. **添加平台参数**:`--platform xilinx_u50_gen3x16_xdma_5_202210_1` 必须添加到编译命令中 2. **平台名称确认**: ```bash # 查看可用平台 ls /opt/xilinx/platforms # 示例输出: # xilinx_u50_gen3x16_xdma_5_202210_1 # xilinx_u200_gen3x16_xdma_1_202110_1 ``` 3. **常见平台名称**: - Alveo U50: `xilinx_u50_gen3x16_xdma_5_202210_1` - Alveo U200: `xilinx_u200_gen3x16_xdma_1_202110_1` - Alveo U250: `xilinx_u250_gen3x16_xdma_4_1_202210_1` ### 环境检查命令 ```bash # 检查XRT安装 echo $XILINX_XRT # 检查Vitis工具链 which v++ # 检查设备状态 xbutil examine ``` ### 调试建议 如果仍遇到问题,尝试分步验证: ```bash # 仅检查平台可用性 v++ --list-platforms # 简化编译测试 v++ -c -t hw --platform xilinx_u50_gen3x16_xdma_5_202210_1 --kernel ip_filter -I. -o test.xo ip_filter.cpp ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值