DirectInput: sample code won't link in C++, is missing _IID_IDirectInput8A

I find that like my code, the sample code for DirectX 9.0 -- specifically, DirectInput -- won't link.  The file I am trying is C:\DirectX\Samples\C++\DirectInput\dinput.dsw (your path may vary, but it does come with the distribution).  

error LNK2001: unresolved external symbol _IID_IDirectInput8A

Under project: settings, link tab, I find that dinput8.lib is being linked in.  I have tried having it link dxguid.lib as well, but this has not helped.

The line in _my_ code that offends is a call:  
                               (void **)&m_pDI,
According to, IID_IDirectInput8 is #defined as _IID_IDirectInput8A or _IID_IDirectInput8W.

I am at a college; the PC's in our lab have the same problem -- but the students say they don't have this problem at home.  (My urgency:  some rely on the lab, and they're hitting this problem.)  I am using MS Visual C++ 6.0 and also Visual .NET (same problem).

Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

You need to add the lib folder to the library list in the options menu of Visual Studio.

Then, in the project settings, linker, you need to add dinput8.lib and maybe dxguid.lib
Btw, the directories might already be set, for both libraries and include, but just check.
Have you used

#define INITGUID
#include <initguid.h>

before including the DirectX headers?

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Starting with Angular 5

Learn the essential features and functions of the popular JavaScript framework for building mobile, desktop and web applications.

It would seem I completely mis-read that problem :)  I guess I read it and decided to ignore the text.

Also, does DIRECTINPUT_VERSION get defined by default anywhere?  Should be 0x0800
Since I really spoke without thinking earlier, maybe this will help also.

I can only think that perhaps the directories are not setup correctly, but then I'd also imagine more would be erroring, however check to make sure that your directX lib folder and include folder are above the default visualstudio folders, and that there IS an entry for the directX lib folder in the library directory setting.
But why is that needed, jkr?

Normal c++ program shouldn't need it...
briggs_wAuthor Commented:
(_corey_, I assume you mean directories put under Tools, Options, Directories tab?  Done.)

jkr:  It works!  I am so relieved (and mystified).  BTW, to get it to work I had to make this slight alteration (as the compiler directed me):

#include <objbase.h>
#define INITGUID
#include <initguid.h>
>>and mystified

No need to be 'mystified' :o)
briggs_wAuthor Commented:
Explain, and I (and _corey_ it seems) won't be!
Sorry for the delay, but the secret simply is that the actual memory allocation has to be done just in one .obj module, so these #ifdef's control where.

(Sorry again, totally missed your comment)
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft Development

From novice to tech pro — start learning today.