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.
OpenALAudio stalls out as a dll
BlitzMax Forums/BlitzMax Programming/OpenALAudio stalls out as a dll 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