On Friday, 27 May 2016 at 12:30:50 UTC, Guillaume Piolat wrote:
On Friday, 27 May 2016 at 12:26:19 UTC, Andrew Edwards wrote:

    OPTLINK (R) for Win32  Release 8.00.17
    Copyright (C) Digital Mars 1989-2013  All rights reserved.
    http://www.digitalmars.com/ctg/optlink.html
    sound.obj(sound)
     Error 42: Symbol Undefined _DirectSoundCreate@12
    --- errorlevel 1


Have you tried with extern(C) yet?
extern(C) is for undecorated symbold
extern(Windows) adds the _ and @12 decorations (would be __stdcall on C/C++ side)

The thought never crossed my mind. Tried it and it works like a charm. Thanks to everyone who responded.

notna: It is not really necessary to put the lib in the libs folder since it's being passed on the command line and available in the build directory. I will place it there eventually though.

On other issue remains that I could not sort out:

Once DirectSoundCreate() returns successfully, I need to call one of the function pointers in the struct but am at a loss of how to define it based on the interface presented.

According the code, SetCooperativeLevel() can be called one of two ways, either via a template[1] or directly through the second parameter provided to and modified by SetCooperativeLevel().

I tried the two approaches below both inside and outside the struct but neither worked.

    // first approach
    struct IDirectSound
    {
        extern(C) HRESULT SetCooperativeLevel(HWND, DWORD);
    }

    // second approach
    alias setCooperativeLevel = HRESULT function(HWND, DWORD);
    setCooperativeLevel SetCooperativeLevel;

It seemed pointless trying to recreate the template since above attempts did not expose the function signature which is necessary to get the template working. Any ideas?

[1] https://gist.github.com/AndrewEdwards/560601a62ea890842ecac90bb41896a8#file-dsound-h-L248

Reply via email to