Strange stack variable corruption error after calling extern(C) function
cc via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue May 3 12:06:30 PDT 2016
On Tuesday, 3 May 2016 at 12:48:37 UTC, Benjamin Thaut wrote:
> It seems that one of the fmod functions you declared is not
> correct. Either the fmod api is not using the c calling
> convention or you made a mistake when declaring the paramters
> of the fmod functions. You should double check that the
> functions match the fmod headers.
I see, thanks. Double checking the original headers, I see the
function is defined as:
FMOD_RESULT F_API FMOD_System_CreateSound
(FMOD_SYSTEM *system, const char *name_or_data, FMOD_MODE mode,
FMOD_CREATESOUNDEXINFO *exinfo, FMOD_SOUND **sound);
F_API seems to be defined as follows:
...
#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) ||
defined(_WIN64)
#define F_STDCALL _stdcall
#define F_DECLSPEC __declspec
#define F_DLLEXPORT ( dllexport )
...
#ifdef DLL_EXPORTS
#define F_API F_DECLSPEC F_DLLEXPORT F_STDCALL
#else
#define F_API F_STDCALL
#endif
I tried going by the information suggested on this page:
http://wiki.dlang.org/D_binding_for_C#cdecl.2C_pascal.2C_stdcall
but if I declare the function, in D, as:
extern(Windows) FMOD_RESULT FMOD_System_CreateSound
(FMOD_SYSTEM *system, const char *name_or_data, FMOD_MODE mode,
FMOD_CREATESOUNDEXINFO *exinfo, FMOD_SOUND **sound);
it fails to link with "Error 42: Symbol Undefined
_FMOD_System_CreateSound at 20". With extern(C) it compiles and
runs but the problem from above persists.
More information about the Digitalmars-d-learn
mailing list