初版于1999年12月13日
云风使用 DirectX 的历史并不算长, 却经常被人误认为是 DirectX 高手, 真是惭愧呀. 时常收到询问 DirectX 相关的问题, 对我大多是不太容易回答的 (我对 DirectX, 尤其是 DirectDraw 并不感冒) 但也有一些说明白了就很简单的问题常常被问到, 特整理出来列在下面:
答: 注意看那个标识里有 IID 没有? 这个 unresolved 的东东是一个 GUID, 定义在 dxguid.lib 里了.
所以一定是你的 project 没有 link dxguid.lib
答: DirectX 使用了 COM 技术, 这些函数是用 vtable 将函数指针连起来的. 一般书上通常介绍的是 C++ 的调用形式, 而没有讲 C 的. 问题中提到的这个 API 的正确 C 调用形式为 IDirectInput_CreateDevice(lpDI, &GUID_SysKeyboard, &lpDIKeyboard, NULL ); 许多朋友写不对. 这里要注意函数的第一个参数是一个 GUID (这是一个宏, lpDI 并不是参数) GUID 是不能直接做参数传递的, 所以要加 & 取地址.