Hi Marco,

Yes - that worked!  Thank you *very* much - I would never have guessed that
that was the problem, and it was driving me mad :-)

Now I can get back to work!

All the best,

Dave.

> From: Marco Bambini <[EMAIL PROTECTED]>
> Reply-To: REALbasic Plugins <[email protected]>
> Date: Fri, 21 Apr 2006 09:45:07 +0200
> To: REALbasic Plugins <[email protected]>
> Subject: Re: Accessing an integer value in class constructor is causing failed
> assertion
> 
> Have you tried to add padding at the end of your to your struct?
> I am quite sure that class data must be on the same size both on
> Windows and on Mac.
> 
> Maybe something like:
> 
> struct HIDManager_Data
> {
>      Boolean                Initialised;
> 
>      #if TARGET_OS_WIN32
> 
>      LPDIRECTINPUT8        myDirectInput8Object;
>      GUID*                GUIDArray; // will store the array of
> current GUIDs
>      UInt32                NumberOfDevices;
> 
>      #elif
> 
>      // assuming that LPDIRECTINPUT8 and GUID are 4 bytes each
>      char pad[12];
> 
>      #endif
> 
> };
> 
> ---
> Marco Bambini
> http://www.sqlabs.net
> http://www.sqlabs.net/blog/
> 
> 
> 
> On Apr 21, 2006, at 9:37 AM, Dave Addey wrote:
> 
>> 
>> Hi all,
>> 
>> I¹m having an incredibly frustrating problem, which probably means
>> I¹m doing
>> something stupid.
>> 
>> I have a class, HIDManager, which has the following data setup:
>> 
>> struct HIDManager_Data
>> {
>>     Boolean                Initialised;
>> 
>>     #if TARGET_OS_WIN32
>> 
>>     LPDIRECTINPUT8        myDirectInput8Object;
>>     GUID*                GUIDArray; // will store the array of
>> current GUIDs
>>     UInt32                NumberOfDevices;
>> 
>>     #endif
>> 
>> };
>> 
>> typedef HIDManager_Data* HIDManager_DataRef;
>> 
>> 
>> ...and the class has the following constructor:
>> 
>> static void HIDManager_Constructor (REALobject instance)
>> {
>> 
>>     ClassData (HIDManager, instance, HIDManager_Data, me);
>>     me->Initialised = false;
>> 
>>     #if TARGET_OS_MAC
>> 
>>     if (RebuildDeviceList(instance) == noErr) {
>>         me->Initialised = true;
>>     }
>> 
>>     #elif TARGET_OS_WIN32
>> 
>>     // blank the GUID list
>>     me->GUIDArray = NULL;
>>     // reset the count
>>     me->NumberOfDevices = 0;
>> 
>>     // create the DirectInput object
>>     HRESULT osErr = DirectInput8Create(GetModuleHandle(NULL),
>> DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&me-
>>> myDirectInput8Object,
>> NULL);
>>     if (osErr == noErr) {
>>         me->Initialised = true;
>>         CountDevices(instance);
>>         RebuildDeviceList(instance);
>>     }
>> 
>>     #endif
>> 
>> }
>> 
>> 
>> 
>> What I am finding is that the ³me->NumberOfDevices = 0² line causes
>> the
>> following error (for a Win32 app, built using this plugin and RB
>> 2006r1 on
>> Mac OS X) when the built application quits:
>> 
>> Runtime Error 4: Failed Assertion
>> Dump.cpp: 111
>> Failure Condition: 0
>> Overwrote start of block
>> 
>> If I comment out this line, everything works fine without the failed
>> assertion.
>> 
>> 
>> Any idea what could be causing this?  I can manipulate the
>> Initialised and
>> GUIDArray values fine.
>> 
>> Thanks in advance for any help!
>> 
>> Dave.
>> _______________________________________________
>> Unsubscribe or switch delivery mode:
>> <http://www.realsoftware.com/support/listmanager/>
>> 
>> Search the archives of this list here:
>> <http://support.realsoftware.com/listarchives/lists.html>
> 
> _______________________________________________
> Unsubscribe or switch delivery mode:
> <http://www.realsoftware.com/support/listmanager/>
> 
> Search the archives of this list here:
> <http://support.realsoftware.com/listarchives/lists.html>


_______________________________________________
Unsubscribe or switch delivery mode:
<http://www.realsoftware.com/support/listmanager/>

Search the archives of this list here:
<http://support.realsoftware.com/listarchives/lists.html>

Reply via email to