DirectX and Wine

François Gouget fgouget at
Thu Apr 26 16:09:25 CDT 2001

R Kadijk wrote:
> I'm having problems compiling and linking a simple DirectX program with Wine.
> The problem is: a global variable c_dfDIMouse should be declared in dinput.h
> and defined in library dinput.
> c_dfDIMouse really is declared in dinput.h, but it seems that c_dfDIMouse is
> not declared in library dinput.
> During linking I get the error: undefined reference to `c_dfDIMouse'.
> Anyone got a clue?

   Well, there seems to be a couple of problems:

 * First the variable is not defined in the dinput library. So you will
probably need to add something like this in one of the dinput files:

const DIDATAFORMAT c_dfDIMouse;

   But then it will need to be initialized somehow. How is one supposed
to get/set its value in DirectX (I don't know DirectX)? Where does its
value come from?

 * then this variable should be declared in 'dlls/dinput/dinput.spec' so
that Windows applications can use it. A line like the following should
do it:

@ extern c_dfDIMouse c_dfDIMouse

 * but the above will not help you for your Winelib application. Winelib
apps cannot import variables from a 'dll'. So what you must do is either
modify your code to invoke a standard DirectX API that would return the
information you need. Or define a couple of macros so that using
c_dfDIMouse invokes a function returning the address of that variable
and then dereferences it. The whole thing would then look like that:

extern const DIDATAFORMAT* c_dfDIMouse();
#define c_dfDIMouse        (*__dinput_c_dfDIMouse())

DIDATAFORMAT dinput_c_dfDIMouse; /* Plus some code to initialize it */
const DIDATAFORMAT* __dinput_c_dfDIMouse()
    return &dinput_c_dfDIMouse;

@ extern c_dfDIMouse dinput_c_dfDIMouse

François Gouget
fgouget at

More information about the wine-users mailing list