Access Violation when passing the result of a C function directly to a D function?

Timothy Foster via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Sep 15 04:01:13 UTC 2017


I'm compiling on Windows 7 x64, DMD32 D Compiler v2.075.1 and I'm 
using Derelict Fmod to handle audio in my application. Every Fmod 
function returns an int telling me if the function ran okay, or 
if there was an error. I've written the following helper function 
that will print something for me if it encounters an error:

static void ErrorFMOD(int result, string msg = ""){
	if(result != FMOD_OK)
		writeln("[ FMOD ] ", msg, FMOD_ErrorString(result));
}

This function has been causing Access Violation Errors when I 
call it. It doesn't happen every time and it doesn't always 
happen in the same place. The errors occur _even when I comment 
out everything inside the function_. I've been calling it like so:

ErrorFMOD(FMOD_System_Create(&system), "Error Creating System: ");

Making the calls without my helper function doesn't cause an 
Access Violation.
Calling it like this is the only thing that seems to fix it:

auto result = FMOD_System_Create(&system);
ErrorFMOD(result, "Error Creating System: ");

Is this a known issue, or am I required to save the result of a C 
function to variable before passing it into another function or?


More information about the Digitalmars-d-learn mailing list