Hi,

Thanks for your answer Joe,sorry to say it doesn't work.

To investigate the problem I have now created a small dll in eVC with 
the following code :
----------------------
DWORD WINAPI fnTest (DWORD *lpTest)
{
 if (lpTest == NULL) 
 {
 return 0;
 }
 else
 {
 return 1;
 }
}
-----------------------
So the function simply checks if the value (a pointer to a long) is 
NULL and in that case returns 0, else 1

Then I call this function from eVB or NSB with the following code :

-----------------------
Option Explicit
Declare Function fnTest Lib "test.DLL" (ByRef lpTest As Long) As Long

Private Sub Command1_Click()
Dim testlng
   testlng = CLng(0)
   On Error Resume Next
   MsgBox "test 1 :" & fnTest(0)
   MsgBox "test 2 :" & fnTest(testlng)
   MsgBox "test 3 :" & fnTest(Null)
   MsgBox "test 4 :" & fnTest(vbNull)
   MsgBox "test 5 :" & fnTest(vbNullString)
   MsgBox "test 6 :" & fnTest(vbnullptr)
End Sub
------------------------

Result is that ONLY the last msgbox (test6) returns 0 in eVB, all 
other calls return 1. 
That means that the vbNullPtr constant is needed to give the lpTest 
parameter the value NULL as recognized by C. 

There seems to be no way to get this result in NS Basic as there is 
no vbnullptr constant there.

As I have lots and lots of APIs and DLL functions to use in my 
planned project, and some parameters are required to be NULL, is 
there any chance of enhancing NS Basic to be able to do this ?

If someone wants to test I can post the above DLL.

Thanks for your help...
    Jingjok



--- In [email protected], "joespan123" <j...@...> wrote:
>
> I searched google and can not really find anything but snippets of
> what vbNullPtr is supposed to be used for, that is:
> 
> "vbNullPtr Constant: The constant vbNullPtr should be used only for
> ByRef parameters."
> 
> Given that a variable to a subroutine is a ByRef by default, that 
is a
> pointer, see if the following code snippet may work.
> 
> Public Const vbNullPtrDef = 0
> 
> Sub RZipInitWrapper(ByVal FirstArg, ByRef vbNullPtrVar)
> 
>    Call RZipInit(FirstArg, vbNullPtrVar)
> 
> End Sub
> 
> Call RZipInitWrapper(57236465, vbNullPtrDef)
> 
> or try
> 
> Dim MyLong
> MyLong = CLong(0)
> 
> Call RZipInitWrapper(57236465, MyLong)
> 
> I do not know if this will work or not as I do not have a DLL to 
test
> it on.
> 
> Regards
> Joe
> 
> 
> --- In [email protected], "jingjok67" <jingjok67@> wrote:
> >
> > Hi,
> > 
> > No, that does not work either. It seems nothing (I tried in eVB, 
too)
> > except vbNullPtr works. Looks like anything else is still a 
variant
> > and vbNullPtr is converted by eVB into something special.
> > 
> > It looks like the function I am trying to call is badly written 
and
> > does not accept 0 instead of NULL. This problem hopefully does not
> > occur with APIs as they accept 0 instead of NULL ? Does anyone 
have
> > experience with this ?
> > 
> > The only workaround I can think of is to write a C DLL to wrap the
> > functions that use null pointers, which is quite ugly and I do not
> > really want to do that.
> > 
> > Any chance to include vbNullPtr in NS Basic ?
> > 
> > In the meantime - is there any other ZIP compression library that
> > works with NS Basic ?
> > 
> > Thanks for your help.
> > 
> > 
> > 
> > --- In [email protected], "George Henne" <gh@> wrote:
> > >
> > > Can you give this a try?
> > > 
> > > vbNullPtr = clng(0)
> > > Call RZipInit (57236465, vbNullPtr)
> > > 
> > > I have no idea if this will work, but the first line forces the
> subtype
> > > of vbNullPtr to be a long, which may help.
> > > 
> > > >Hello George,
> > > >
> > > >That is strange, if I try the line 
> > > >
> > > >Msgbox typename(vbNullPtr) & " " & vbNullPtr
> > > >
> > > >in eVB and run the code I get an error that variable vbNullPtr 
is not
> > > >defined. But then when I use the vbNullPtr in a declared 
function
> > > >call, it works ! I have triple-checked and did not make a 
writing
> > mistake.
> > > >
> > > >It looks like eVB is only accepting this constant as a 
parameter for
> > > >declared functions.
> > > >
> > > >What I am trying to do is to use the Resco ZIP DLL, here is the
> sample
> > > >code (NS Basic) :
> > > >
> > > >Option Explicit
> > > >
> > > >Declare "Sub RZipInit Lib ""RZip.dll"" (ByVal uCode As Long, 
ByRef
> > > >lpCallbackFunc As Long)"
> > > >
> > > >Call RZipInit (57236465, vbNullPtr)
> > > >
> > > >This code works fine in eVB but NS Basic gives me an error that
> > > >vbNullPtr is not defined. 
> > > >
> > > >I have then done further testing in eVB and NS Basic and found 
that I
> > > >cannot substitute vbNullPtr with anything else, i.e. Null, 
nothing,
> > > >vbNull, 0, vbNullString, vbNullChar. In that case the code 
runs but
> > > >the function fails. ONLY vbNullPtr works. I guess that is the 
reason
> > > >why Microsoft added the vbNullPtr in the first place.
> > > >
> > > >It looks like the code in the RZipInit dll checks this 
parameter for
> > > >NULL (as in C++), i.e. 
> > > >if (param2 == NULL) DoSomething
> > > >The dll call obviously converts anything except vbNullPtr to
> something
> > > >else than NULL (as defined in C)
> > > >
> > > >
> > > >Then... is there any way to use or substitute vbNullPtr in NS
> Basic or
> > > >any other trick to make this work ?
> > > >
> > > >Thanks for your help.
> > > >
> > > >
> > > >
> > > >
> > > >--- In [email protected], "George Henne" <gh@> wrote:
> > > >>
> > > >> My copy of eVB has decided it does not want to work anymore, 
so I
> > can't
> > > >> try this here at the moment.
> > > >> 
> > > >> Write a short eVB program that does
> > > >> 
> > > >> Msgbox typename(vbNullPtr) & " " & vbNullPtr
> > > >> 
> > > >> Hopefully, that will give the answer. Let us know, so we can 
add
> > this to
> > > >> the Tech Note.
> > > >> 
> > > >> >Hi,
> > > >> >
> > > >> >I need to call an function in a dll with a vbNullPtr (this 
is
> > > >> >pre-defined in eVB) value in a parameter. What is the
> substitute for
> > > >> >vbNullPtr in NS Basic ? I tried Null but that did not work.
> > > >> >
> > > >> >Thanks !
> > > >> >
> > > >> >
> > > >> >------------------------------------
> > > >> >
> > > >> >Yahoo! Groups Links
> > > >> >
> > > >> >
> > > >> >
> > > >>
> > > >
> > > >
> > > >
> > > >------------------------------------
> > > >
> > > >Yahoo! Groups Links
> > > >
> > > >
> > > >
> > >
> >
>



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"nsb-ce" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/nsb-ce?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to