[vorbis-dev] Problems trying to run the examples in windows v orbis sdk

Chris Wolf cwolf at starclass.com
Fri Sep 7 03:51:29 PDT 2001



I merged these changes into the head revisions of the effected files.
(vorbis/lib/resistry.c, vorbis/lib/vorbisenc.c)  Dynamic linking should now
work on win32.  There are no changes to the Linux build.

   -Chris

*********** REPLY SEPARATOR  ***********

On 9/5/2001 at 3:04 PM Chris Wolf wrote:

>On 9/5/2001 at 9:45 AM Chris Parsons wrote:
>
>>> On 9/4/2001 at 6:00 PM Pablos-Sanchez, Rolando wrote:
>>> 
>>> >I have compiled the example 'encoder_example.c' just to start, and it
>>> >compiles, but I got a error in the following line just at the
>>beginning: 
>>> >vorbis_encode_init(&vi,2,44100, -1, 128000, -1);
>>> >The error is more or less: The instruction at '0xaddresss' referenced
>>> >memory at '0xaddress'. The memory could not be "read".
>>> 
>>> The work around for this problem is to include vorbisenc.c in the vorbis
>>DLL and not have a
>>> separate, stand alone vorbisenc.dll.  If you do this, then this problem
>>disappears.  Obviously,
>>> since the vorbisenc code is quite large, and a lot of applications will
>>only be decoding, this
>>> is not a permenent solution.
>>> 
>>> This may have to do with how global data is treated in DLLs, which is
>>that
>>each client gets a 
>>> fresh instance of the global data.  The problem seems to be accessing
>>_time_P accross DLLs
>>> (vorbisenc.dll accessing _time_P in vorbis.dll)  I'm thinking of trying
>a
>>named data segment.
>>
>>
>>That is exactly what the case is.  There is only a couple of ways to
>savely
>>access global data across DLL's in Windows, probably the safest is to use
>>CreateFileMapping() with a named memory space.  This way if the space was
>>already created by a previous instance of the DLL it will open that space
>>and not create a new one.  It used to be possible to pass global pointers
>>across DLL's in Windows 3.x and to some extent with Win 9x, but it's more
>>or
>>less down right illegal in Win NT x.  It is legal however for a memory
>>space
>>allocated with GlobalAlloc to be passed to the calling application (or
>DLL)
>>by handle.
>
>Isn't it true that if you bracket global definitions with
>#pragma data_seg(".some_name")
>...
>#pragma data_seg()
>
>...that those globals become sharable a' la 3.x DLL's?  In any case, I
>tried it and it didn't help.
>
>>From the debugger, I can access the address of _time_P, which is a global
>inside vorbis.dll (I also have it exported in the module definition file) 
>I can even access the first element
>of this pointer array, but when a try to dereference one of the function
>pointers, it blows up. 
>
>Here's what I tried  (vorbisenc.c):
>
>  /* time backend settings */
>  for(i=0;i<ci->times;i++)
>  {
>      int vit = ci->time_type[i];
>      vorbis_func_time *data = _time_P[vit];                              
>   // this succeeds
>
> //    void *(*copy_info)(vorbis_info_time *) = _time_P[vit];             
>// access violation
> //    void *(*copy_info)(vorbis_info_time *) = data->copy_info;        //
>access violation
>//     void *(*copy_info)(vorbis_info_time *) = time0_copy_info;       //
>this succeeds
>//     void *(*copy_info)(vorbis_info_time *) =
>time0_exportbundle.copy_info; // this succeeds
>
>      ci->time_param[i] = copy_info(cs->time_param[i]);
>    /*
>    ci->time_param[i]=_time_P[ci->time_type[i]]->
>      copy_info(cs->time_param[i]);
>      */
>  }
>
>
>
>--- >8 ----
>List archives:  http://www.xiph.org/archives/
>Ogg project homepage: http://www.xiph.org/ogg/
>To unsubscribe from this list, send a message to
>'vorbis-dev-request at xiph.org'
>containing only the word 'unsubscribe' in the body.  No subject is needed.
>Unsubscribe messages sent to the list will be ignored/filtered.

--- >8 ----
List archives:  http://www.xiph.org/archives/
Ogg project homepage: http://www.xiph.org/ogg/
To unsubscribe from this list, send a message to 'vorbis-dev-request at xiph.org'
containing only the word 'unsubscribe' in the body.  No subject is needed.
Unsubscribe messages sent to the list will be ignored/filtered.



More information about the Vorbis-dev mailing list