linker: undefined symbol when an interface is derived from.

Neal Alexander wqeqweuqy at hotmail.com
Mon Feb 26 09:00:55 PST 2007


The IDirect3D8 interface works fine if its used opaquely with the 
various directx routines; but when the interface is used to make a class 
that implements it, or in this case wraps it, the linker cant find the 
IDirect3D8 interface symbol.

Scope issues or compiler bug?


 > dmd file2.d file1.d uuid.lib d3d8.lib

file2.obj(dx8_wrapper)
  Error 42: Symbol Undefined _D4d3d810IDirect3D811__InterfaceZ


---------------------------------------------------------------------
d3d8.d
---------------------------------------------------------------------
// ... snip ...

extern (Windows):
interface IDirect3D8 : public IUnknown
{
     /*** IUnknown methods ***/
     //HRESULT QueryInterface(IID*, void**);
     //ULONG AddRef();
     //ULONG Release();

     // ... snip ...

     HRESULT CreateDevice(UINT,D3DDEVTYPE,HWND,DWORD,
                          D3DPRESENT_PARAMETERS*,IDirect3DDevice8*);
}

// ...
---------------------------------------------------------------------
file1.d
---------------------------------------------------------------------
import d3d8;


extern (Windows):
class dx8_wrapper : ComObject, public IDirect3D8
{
     // ... snip ...

     HRESULT CreateDevice(
         UINT adapter,
         D3DDEVTYPE type,
         HWND window,
         DWORD flags,
         D3DPRESENT_PARAMETERS * pp,
         IDirect3DDevice8      * result)
     {
         HRESULT ret;

	ret = d3d.CreateDevice(adapter, type,
                                window, flags, pp, &device);
         *result = device;

         return ret;
     }

     this(IDirect3D8 base){ d3d = base; }

     IDirect3D8       d3d;
     IDirect3DDevice8 device;
}






More information about the Digitalmars-d-learn mailing list