On 29 April 2014 20:54, Markus Fritsche <mfrits...@reauktion.de> wrote:

> Hello Igor,
>
> I did change my class (tbh, I was just looking at the Cairo stuff and
> did some cargo cult programming).
>
> NBFFICallout new resolveType: #TM1U prints TM1U
>
> NBFFICallout new resolveType: #TM1P prints TM1P
>
> - my DoIt still gives NBExternalType
>
> I attached the resulting CompiledMethod as a fuel serialized file.
>
> What can I look at more deeply?
>
> i don't know what is going on..
everything looks correct..

as a workaround, you can change the return type of offending call to return
uint,
and then you can manually convert it to instance of TM1P with corresponding
handle value.

Also, i doubt it, but try change the alignment
NativeBoostWin32>>stackAlignment
 to use 16


P.S. the fuel file with compiled method is not really helpful - it gives me
an error during materialization.


> Thank you for your patience,
>   Markus
>
> On 29.04.2014 00:36, Igor Stasenko wrote:
> > Object subclass: #TM1U
> >     uses: TTM1ApiLibrary
> >     instanceVariableNames: 'handle'
> >     classVariableNames: ''
> >     poolDictionaries: ''
> >     category: 'Cognos-TM1-Api'
> >
> > hmm.. why just don't subclass from NBExternalObject?
> > If you don't need to subclass from own base class, you can just subclass
> > from
> > NBExternalObject, which means you already having handle ivar, and
> > #asNBExternalType: inherited at class side, tested and working..?
> >
> >
> > So, try
> >
> > NBFFICallout new resolveType: #TM1U
> >
> > what it gives?
> >
> > On 28 April 2014 23:44, Markus Fritsche <mfrits...@reauktion.de> wrote:
> >
> >>
> >> On 28.04.2014 13:30, Igor Stasenko wrote:
> >>> This is strange.. should work fine. There's no way how
> >>> NBExternalObjectType could return an instance of NBExternalHandle.
> >>> Please check your code again.
> >> Been there, done that => thrown everything away and restarted the code
> >> from scratch... Sourcecode attached (the 32bit libraries are in the bin
> >> subdirectory, there's another bin64 directory) - is there anything
> >> obvious wrong with it?.
> >>
> >> Workspace:
> >> ====================
> >> TM1LibraryLoader loadTM1Library.
> >>
> >> TM1Library tm1APIInitialize.
> >> hUser := TM1Library tm1SystemOpen.
> >> hPool1 := hUser tm1ValPoolCreate.
> >> hPool1 inspect.
> >> hUser tm1SystemClose.
> >> TM1Library tm1APIFinalize.
> >> ====================
> >>
> >> The Inspector I get shows
> >> NBExternalHandle
> >> self    @ 16r74CF4A8
> >> (apparently it's fine for TM1U, otherwise tm1ValPoolCreate wouldn't be
> >> found)
> >>
> >> could it be inspector screwed?
> > what
> > hPool1 class
> > gives?
> >
> >
> >> From the headers:
> >>
> >> #define TM1API __stdcall
> >> #ifndef TM1IMPORT
> >>   #define TM1IMPORT __declspec( dllimport )
> >> #endif
> >>
> >> typedef void         * TM1U;           // user  handle
> >> typedef void         * TM1P;           // pool  handle
> >> TM1IMPORT void TM1API TM1APIInitialize( void );
> >> TM1IMPORT TM1U TM1API TM1SystemOpen( void );
> >> TM1IMPORT TM1P TM1API TM1ValPoolCreate( TM1U hUser );
> >>
> >>
> >  i don't see where you are using stdcall calling convention option?
> >  you should specify it either in code:
> >
> > self nbCallout
> >    stdCall
> >    function: #( TM1U  TM1SystemOpen( ) ) module:
> >
> > or in the class with callout, implementing
> >
> > ffiCalloutOptions
> > ^ #( + optStdcall )
> >
> > (i think you can just put it into trait)
> >
> >
> >> In order to debug further I will have to redo the Windows VM.
> >>
> >
> >
> >
>



-- 
Best regards,
Igor Stasenko.

Reply via email to