yeah.. it is really fuzzy thing: http://blog.xploiter.com/programming-related-content/cc-null-pointers/
On 6 November 2012 20:14, Igor Stasenko <[email protected]> wrote: > On 6 November 2012 20:02, Luc Fabresse <[email protected]> wrote: >> Hi all, >> >> 2012/11/6 Igor Stasenko <[email protected]> >>> >>> On 2 November 2012 06:05, Torsten Bergmann <[email protected]> wrote: >>> > Hi Igor, >>> > >>> > in Win32 often one passes NULL as argument >>> > (for instance if a function has an argument "handle to a window", then >>> > a hWnd of NULL can be given). >>> > >>> > For instance when I have >>> > >>> > shellExecute: hwnd operation: lpOperation file: lpFile parameters: >>> > lpParameters directory: lpDirectory show: nShowCmd >>> > <primitive: #primitiveNativeCall module: >>> > #NativeBoostPlugin> >>> > >>> > ^ self nbCall: #( >>> > HINSTANCE ShellExecuteA( >>> > HWND hwnd, >>> > LPCTSTR lpOperation, >>> > LPCTSTR lpFile, >>> > LPCTSTR lpParameters, >>> > LPCTSTR lpDirectory, >>> > INT nShowCmd)) module: 'Shell32.dll' >>> > >>> >>> usually it controlled by options for code generator >>> like #optCoerceNilToNull >>> which will allow you to pass nil as valid argument. >>> >>> What is missing, is that in your case you passing an instance of >>> NBExternalObject, >>> and NBExternalObjectType converter does not honors that option. >>> This is easy to fix. I will add it as time allows me to do a pass on >>> NativeBoost. >>> >>> > >>> > The NBFFICallout class(NBNativeCodeGen >>> > class)>>handleFailureIn:nativeCode: >>> > tells me that "an instance of NBWin32Window" is expected. >>> > >>> right, so what you can do is to synthesize an instance of >>> NBWin32Window with handle value == 0. >>> This will effectively behave as if you passed null argument. Sure it >>> is not nearly elegant, so i mentioning it >>> just for protocol :) >>> >>> >>> > So currently I have to pass "NBWin32Window getFocus" as first >>> > argument. But often this is not necessary. >>> > >>> Another way of doing this is use convenience methods. Like with your >>> function, >>> you could have two methods for it, one which takes window argument, >>> and another which doesn't: >>> >>> >>> shellExecute: lpOperation file: lpFile parameters: lpParameters >>> directory: lpDirectory show: nShowCmd >>> >>> ^ self nbCall: #( >>> HINSTANCE ShellExecuteA( >>> 0, >>> LPCTSTR lpOperation, >>> LPCTSTR lpFile, >>> LPCTSTR lpParameters, >>> LPCTSTR lpDirectory, >>> INT nShowCmd)) module: 'Shell32.dll' >> >> >> yes I like this NB feature of directly put real values in external call >> definitions. >> But, having a NULL constant could also makes sense: >> >> ^ self nbCall: #( >> HINSTANCE ShellExecuteA( >> NULL, >> >> LPCTSTR lpOperation, >> LPCTSTR lpFile, >> LPCTSTR lpParameters, >> LPCTSTR lpDirectory, >> INT nShowCmd)) module: 'Shell32.dll' >> >> perhaps NULL is already there somewhere, I never look for it ;-) >> > > AFAIK, NULL pointer is not a standard part of ANSI C > the existance of > > #define NULL 0 > > in many implementations doesn't actually makes it "official" > > so, if you don't like putting 0 , you can always use class var with > value = 0 , and name it 'NULL' > 'NUL' or 'ZERO' or whatever you want :) > > >> Luc >> > > -- > Best regards, > Igor Stasenko. -- Best regards, Igor Stasenko.
