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