OpenALAudio stalls out as a dll

BlitzMax Forums/BlitzMax Programming/OpenALAudio stalls out as a dll

When SetAudioDriver() is called with brl.openalaudio, the program stalls out when compiled as a dll. I think this is the same problem I had with Newton, where you have to have the extra dll initialization in a function instead of the main dll entry point.

If anyone runs into the same problem, this can be fixed by moving the initialization code into a function:
'Constants
Const ALC_FALSE=0
Const ALC_TRUE=1
Const ALC_FREQUENCY=$1007
Const ALC_REFRESH=$1008
Const ALC_SYNC=$1009
Const ALC_MONO_SOURCES=$1010
Const ALC_STEREO_SOURCES=$1011
Const ALC_NO_ERROR=ALC_FALSE
Const ALC_INVALID_DEVICE=$a001
Const ALC_INVALID_CONTEXT=$a002
Const ALC_INVALID_ENUM=$a003
Const ALC_INVALID_VALUE=$a004
Const ALC_OUT_OF_MEMORY=$a005
Const ALC_DEFAULT_DEVICE_SPECIFIER=$1004
Const ALC_DEVICE_SPECIFIER=$1005
Const ALC_EXTENSIONS=$1006
Const ALC_MAJOR_VERSION=$1000
Const ALC_MINOR_VERSION=$1001
Const ALC_ATTRIBUTES_SIZE=$1002
Const ALC_ALL_ATTRIBUTES=$1003
Const ALC_CAPTURE_DEVICE_SPECIFIER=$310
Const ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER=$311
Const ALC_CAPTURE_SAMPLES=$312

Const AL_NONE=0
Const AL_FALSE=0
Const AL_TRUE=1
Const AL_SOURCE_RELATIVE=$202
Const AL_CONE_INNER_ANGLE=$1001
Const AL_CONE_OUTER_ANGLE=$1002
Const AL_PITCH=$1003
Const AL_POSITION=$1004
Const AL_DIRECTION=$1005
Const AL_VELOCITY=$1006
Const AL_LOOPING=$1007
Const AL_BUFFER=$1009
Const AL_GAIN=$100a
Const AL_MIN_GAIN=$100d
Const AL_MAX_GAIN=$100e
Const AL_ORIENTATION=$100f
Const AL_SOURCE_STATE=$1010
Const AL_INITIAL=$1011
Const AL_PLAYING=$1012
Const AL_PAUSED=$1013
Const AL_STOPPED=$1014
Const AL_BUFFERS_QUEUED=$1015
Const AL_BUFFERS_PROCESSED=$1016
Const AL_SEC_OFFSET=$1024
Const AL_SAMPLE_OFFSET=$1025
Const AL_BYTE_OFFSET=$1026
Const AL_SOURCE_TYPE=$1027
Const AL_STATIC=$1028
Const AL_STREAMING=$1029
Const AL_UNDETERMINED=$1030
Const AL_FORMAT_MONO8=$1100
Const AL_FORMAT_MONO16=$1101
Const AL_FORMAT_STEREO8=$1102
Const AL_FORMAT_STEREO16=$1103
Const AL_REFERENCE_DISTANCE=$1020
Const AL_ROLLOFF_FACTOR=$1021
Const AL_CONE_OUTER_GAIN=$1022
Const AL_MAX_DISTANCE=$1023
Const AL_FREQUENCY=$2001
Const AL_BITS=$2002
Const AL_CHANNELS=$2003
Const AL_SIZE=$2004
Const AL_UNUSED=$2010
Const AL_PENDING=$2011
Const AL_PROCESSED=$2012
Const AL_NO_ERROR=AL_FALSE
Const AL_INVALID_NAME=$a001
Const AL_INVALID_ENUM=$a002
Const AL_INVALID_VALUE=$a003
Const AL_INVALID_OPERATION=$a004
Const AL_OUT_OF_MEMORY=$a005
Const AL_VENDOR=$b001
Const AL_VERSION=$b002
Const AL_RENDERER=$b003
Const AL_EXTENSIONS=$b004
Const AL_DOPPLER_FACTOR=$c000
Const AL_DOPPLER_VELOCITY=$c001
Const AL_SPEED_OF_SOUND=$c003
Const AL_DISTANCE_MODEL=$d000
Const AL_INVERSE_DISTANCE=$d001
Const AL_INVERSE_DISTANCE_CLAMPED=$d002
Const AL_LINEAR_DISTANCE=$d003
Const AL_LINEAR_DISTANCE_CLAMPED=$d004
Const AL_EXPONENT_DISTANCE=$d005
Const AL_EXPONENT_DISTANCE_CLAMPED=$d006

'Function declarations
Global alcOpenDevice( devicename$z )
Global alcCloseDevice( device )
Global alcGetError( device )
Global alcGetString:Byte Ptr( device,param )
Global alcGetIntegerv( device,param,size,data:Int Ptr )
Global alcCreateContext( device,attrlist:Int Ptr )
Global alcMakeContextCurrent( context )
Global alcProcessContext( context )
Global alcSuspendContext( context )
Global alcDestroyContext( context )
Global alcGetCurrentContext()
Global alcGetContextsDevice( context )
Global alcIsExtensionPresent( device,extName$z )
Global alcGetProcAddress:Byte Ptr( device,funcName$z )
Global alcGetEnumValue( device,enumName$z )
Global alcCaptureOpenDevice( devicename$z,frequency,format,buffersize )
Global alcCaptureCloseDevice( device )
Global alcCaptureStart( device )
Global alcCaptureStop( device )
Global alcCaptureSamples( device,buffer:Byte Ptr,samples )

Global alEnable( capability )
Global alDisable( capability )
Global alIsEnabled( capability )
Global alGetString:Byte Ptr( param )
Global alGetBooleanv( param,data:Byte Ptr )
Global alGetIntegerv( param,data:Int Ptr )
Global alGetFloatv( param,data:Float Ptr )
Global alGetDoublev( param,data:Double Ptr )
Global alGetBoolean( param )
Global alGetInteger( param )
Global alGetFloat#( param )
Global alGetDouble!( param )
Global alGetError()
Global alIsExtensionPresent( extname$z )
Global alGetProcAddress:Byte Ptr( fname$z )
Global alGetEnumValue( ename$z )
Global alListenerf( param,value# )
Global alListener3f( param,value1#,value2#,value3# )
Global alListenerfv( param,values:Float Ptr )
Global alListeneri( param,value )
Global alListener3i( param,value1,value2,value3 )
Global alListeneriv( param,values:Int Ptr )
Global alGetListenerf( param,value:Float Ptr )
Global alGetListener3f( param,value1:Float Ptr,value2:Float Ptr,value3:Float Ptr )
Global alGetListenerfv( param,values:Float Ptr )
Global alGetListeneri( param,value:Int Ptr )
Global alGetListener3i( param,value1:Int Ptr,value2:Int Ptr,value3:Int Ptr )
Global alGetListeneriv( param,values:Int Ptr )
Global alGenBuffers( n,buffers:Int Ptr )
Global alDeleteBuffers( n,buffers:Int Ptr )
Global alIsBuffer( bid )
Global alBufferData( bid,format,data:Byte Ptr,size,freq )
Global alBufferf( bid,param,value# )
Global alBuffer3f( bid,param,value1#,value2#,value3# )
Global alBufferfv( bid,param,values:Float Ptr )
Global alBufferi( bid,param,value )
Global alBuffer3i( bid,param,value1,value2,value3 )
Global alBufferiv( bid,param,values:Int Ptr )
Global alGetBufferf( bid,param,value:Float Ptr )
Global alGetBuffer3f( bid,param,value1:Float Ptr,value2:Float Ptr,value3:Float Ptr )
Global alGetBufferfv( bid,param,values:Float Ptr )
Global alGetBufferi( bid,param,value:Int Ptr )
Global alGetBuffer3i( bid,param,value1:Int Ptr,value2:Int Ptr,value3:Int Ptr )
Global alGetBufferiv( bid,param,values:Int Ptr )
Global alGenSources( n,sources:Int Ptr )
Global alDeleteSources( n,sources:Int Ptr )
Global alIsSource( sid )
Global alSourcef( sid,param,value# )
Global alSource3f( sid,param,value1#,value2#,value3# )
Global alSourcefv( sid,param,values:Float Ptr )
Global alSourcei( sid,param,value )
Global alSource3i( sid,param,value1,value2,value3 )
Global alSourceiv( sid,param,values:Int Ptr )
Global alGetSourcef( sid,param,value:Float Ptr )
Global alGetSource3f( sid,param,value1:Float Ptr,value2:Float Ptr,value3:Float Ptr )
Global alGetSourcefv( sid,param,values:Float Ptr )
Global alGetSourcei( sid,param,value:Int Ptr )
Global alGetSource3i( sid,param,value1:Int Ptr,value2:Int Ptr,value3:Int Ptr )
Global alGetSourceiv( sid,param,values:Int Ptr )
Global alSourcePlayv( ns,sids:Int Ptr )
Global alSourceStopv( ns,sids:Int Ptr )
Global alSourceRewindv( ns,sids:Int Ptr )
Global alSourcePausev( ns,sids:Int Ptr )
Global alSourcePlay( sid )
Global alSourceStop( sid )
Global alSourceRewind( sid )
Global alSourcePause( sid )
Global alSourceQueueBuffers( sid,numEntries,bids:Int Ptr )
Global alSourceUnqueueBuffers( sid,numEntries,bids:Int Ptr )
Global alDopplerFactor( value# )
Global alDopplerVelocity( value# )
Global alSpeedOfSound( value# )
Global alDistanceModel( distanceModel )

Function InitOpenAL:Int()
	Global hlib:Int
	Select hlib
		Case 0
			hlib=LoadLibraryA("OpenAL32.dll")
			If Not hlib
				hlib=-1
				Return
			EndIf
		Case -1
			Return
		Default
			Return hlib
	EndSelect
	
	alcOpenDevice=GetProcAddress(hlib,"alcOpenDevice")
	alcCloseDevice=GetProcAddress(hlib,"alcCloseDevice")
	alcGetError=GetProcAddress(hlib,"alcGetError")
	alcGetString=GetProcAddress(hlib,"alcGetString")
	alcGetIntegerv=GetProcAddress(hlib,"alcGetIntegerv")
	alcCreateContext=GetProcAddress(hlib,"alcCreateContext")
	alcMakeContextCurrent=GetProcAddress(hlib,"alcMakeContextCurrent")
	alcProcessContext=GetProcAddress(hlib,"alcProcessContext")
	alcSuspendContext=GetProcAddress(hlib,"alcSuspendContext")
	alcDestroyContext=GetProcAddress(hlib,"alcDestroyContext")
	alcGetCurrentContext=GetProcAddress(hlib,"alcGetCurrentContext")
	alcGetContextsDevice=GetProcAddress(hlib,"alcGetContextsDevice")
	alcIsExtensionPresent=GetProcAddress(hlib,"alcIsExtensionPresent")
	alcGetProcAddress=GetProcAddress(hlib,"alcGetProcAddress")
	alcGetEnumValue=GetProcAddress(hlib,"alcGetEnumValue")
	alcCaptureOpenDevice=GetProcAddress(hlib,"alcCaptureOpenDevice")
	alcCaptureCloseDevice=GetProcAddress(hlib,"alcCaptureCloseDevice")
	alcCaptureStart=GetProcAddress(hlib,"alcCaptureStart")
	alcCaptureStop=GetProcAddress(hlib,"alcCaptureStop")
	alcCaptureSamples=GetProcAddress(hlib,"alcCaptureSamples")
	
	alEnable=GetProcAddress(hlib,"alEnable")
	alDisable=GetProcAddress(hlib,"alDisable")
	alIsEnabled=GetProcAddress(hlib,"alIsEnabled")
	alGetString=GetProcAddress(hlib,"alGetString")
	alGetBooleanv=GetProcAddress(hlib,"alGetBooleanv")
	alGetIntegerv=GetProcAddress(hlib,"alGetIntegerv")
	alGetFloatv=GetProcAddress(hlib,"alGetFloatv")
	alGetDoublev=GetProcAddress(hlib,"alGetDoublev")
	alGetBoolean=GetProcAddress(hlib,"alGetBoolean")
	alGetInteger=GetProcAddress(hlib,"alGetInteger")
	alGetFloat=GetProcAddress(hlib,"alGetFloat")
	alGetDouble=GetProcAddress(hlib,"alGetDouble")
	alGetError=GetProcAddress(hlib,"alGetError")
	alIsExtensionPresent=GetProcAddress(hlib,"alIsExtensionPresent")
	alGetProcAddress=GetProcAddress(hlib,"alGetProcAddress")
	alGetEnumValue=GetProcAddress(hlib,"alGetEnumValue")
	alListenerf=GetProcAddress(hlib,"alListenerf")
	alListener3f=GetProcAddress(hlib,"alListener3f")
	alListenerfv=GetProcAddress(hlib,"alListenerfv")
	alListeneri=GetProcAddress(hlib,"alListeneri")
	alListener3i=GetProcAddress(hlib,"alListener3i")
	alListeneriv=GetProcAddress(hlib,"alListeneriv")
	alGetListenerf=GetProcAddress(hlib,"alGetListenerf")
	alGetListener3f=GetProcAddress(hlib,"alGetListener3f")
	alGetListenerfv=GetProcAddress(hlib,"alGetListenerfv")
	alGetListeneri=GetProcAddress(hlib,"alGetListeneri")
	alGetListener3i=GetProcAddress(hlib,"alGetListener3i")
	alGetListeneriv=GetProcAddress(hlib,"alGetListeneriv")
	alGenBuffers=GetProcAddress(hlib,"alGenBuffers")
	alDeleteBuffers=GetProcAddress(hlib,"alDeleteBuffers")
	alIsBuffer=GetProcAddress(hlib,"alIsBuffer")
	alBufferData=GetProcAddress(hlib,"alBufferData")
	alBufferf=GetProcAddress(hlib,"alBufferf")
	alBuffer3f=GetProcAddress(hlib,"alBuffer3f")
	alBufferfv=GetProcAddress(hlib,"alBufferfv")
	alBufferi=GetProcAddress(hlib,"alBufferi")
	alBuffer3i=GetProcAddress(hlib,"alBuffer3i")
	alBufferiv=GetProcAddress(hlib,"alBufferiv")
	alGetBufferf=GetProcAddress(hlib,"alGetBufferf")
	alGetBuffer3f=GetProcAddress(hlib,"alGetBuffer3f")
	alGetBufferfv=GetProcAddress(hlib,"alGetBufferfv")
	alGetBufferi=GetProcAddress(hlib,"alGetBufferi")
	alGetBuffer3i=GetProcAddress(hlib,"alGetBuffer3i")
	alGetBufferiv=GetProcAddress(hlib,"alGetBufferiv")
	alGenSources=GetProcAddress(hlib,"alGenSources")
	alDeleteSources=GetProcAddress(hlib,"alDeleteSources")
	alIsSource=GetProcAddress(hlib,"alIsSource")
	alSourcef=GetProcAddress(hlib,"alSourcef")
	alSource3f=GetProcAddress(hlib,"alSource3f")
	alSourcefv=GetProcAddress(hlib,"alSourcefv")
	alSourcei=GetProcAddress(hlib,"alSourcei")
	alSource3i=GetProcAddress(hlib,"alSource3i")
	alSourceiv=GetProcAddress(hlib,"alSourceiv")
	alGetSourcef=GetProcAddress(hlib,"alGetSourcef")
	alGetSource3f=GetProcAddress(hlib,"alGetSource3f")
	alGetSourcefv=GetProcAddress(hlib,"alGetSourcefv")
	alGetSourcei=GetProcAddress(hlib,"alGetSourcei")
	alGetSource3i=GetProcAddress(hlib,"alGetSource3i")
	alGetSourceiv=GetProcAddress(hlib,"alGetSourceiv")
	alSourcePlayv=GetProcAddress(hlib,"alSourcePlayv")
	alSourceStopv=GetProcAddress(hlib,"alSourceStopv")
	alSourceRewindv=GetProcAddress(hlib,"alSourceRewindv")
	alSourcePausev=GetProcAddress(hlib,"alSourcePausev")
	alSourcePlay=GetProcAddress(hlib,"alSourcePlay")
	alSourceStop=GetProcAddress(hlib,"alSourceStop")
	alSourceRewind=GetProcAddress(hlib,"alSourceRewind")
	alSourcePause=GetProcAddress(hlib,"alSourcePause")
	alSourceQueueBuffers=GetProcAddress(hlib,"alSourceQueueBuffers")
	alSourceUnqueueBuffers=GetProcAddress(hlib,"alSourceUnqueueBuffers")
	alDopplerFactor=GetProcAddress(hlib,"alDopplerFactor")
	alDopplerVelocity=GetProcAddress(hlib,"alDopplerVelocity")
	alSpeedOfSound=GetProcAddress(hlib,"alSpeedOfSound")
	alDistanceModel=GetProcAddress(hlib,"alDistanceModel")
	
	Return hlib
EndFunction