Version 1.03.0

General discussion for topics related to the FreeBASIC project or its community.
D.J.Peters
Posts: 8586
Joined: May 28, 2005 3:28
Contact:

Version 1.03.0

Post by D.J.Peters »

Thank you DKL you are my hero :-)

Do you have a air conditioner ? it's too warm here.

Joshy
srvaldez
Posts: 3379
Joined: Sep 25, 2005 21:54

Re: Version 1.03.0

Post by srvaldez »

I agree with D.J.Peters, thank you DKL :)
VANYA
Posts: 1839
Joined: Oct 24, 2010 15:16
Location: Ярославль
Contact:

Re: Version 1.03.0

Post by VANYA »

Hi ALL!

dkl! Thank you for the new version!

Now the problems:

This type of warning appears:

Code: Select all

...
? sizeof(INITCOMMONCONTROLSEX)
....
output:
FbTemp.bas(3) warning 37(1): Ambigious sizeof(), referring to type alias INITCOMMONCONTROLSEX, instead of procedure INITCOMMONCONTROLSEX

Code: Select all

...
? SIZEOF(PrintDlg)
? SizeOf(PAGESETUPDLG)
...
output:
FbTemp.bas(63) warning 37(1): Ambigious sizeof(), referring to type alias PRINTDLG, instead of procedure PRINTDLG
FbTemp.bas(113) warning 37(1): Ambigious sizeof(), referring to type alias PAGESETUPDLG, instead of procedure PAGESETUPDLG
fxm
Moderator
Posts: 12131
Joined: Apr 22, 2009 12:46
Location: Paris suburbs, FRANCE

Re: Version 1.03.0

Post by fxm »

I too thank you for this latest release.
Good effort during the heat wave here!
fxm
Moderator
Posts: 12131
Joined: Apr 22, 2009 12:46
Location: Paris suburbs, FRANCE

Re: Version 1.03.0

Post by fxm »

@VANYA

Have you seen this '[added]' in the changelog:
- len/sizeof/typeof will now warn if the given identifier is ambigious (i.e. if it could refer to both a type or a procedure/variable symbol), because currently the type will be preferred, which is typically unexpected, at least for len() on strings.
and the previous dkl's post:
http://www.freebasic.net/forum/viewtopi ... 09#p208609
(in topic: http://www.freebasic.net/forum/viewtopi ... =3&t=23624)
Tourist Trap
Posts: 2958
Joined: Jun 02, 2015 16:24

Re: Version 1.03.0

Post by Tourist Trap »

Hi,

Thanks to developers for the work done.
VANYA
Posts: 1839
Joined: Oct 24, 2010 15:16
Location: Ярославль
Contact:

Re: Version 1.03.0

Post by VANYA »

fxm wrote:@VANYA

Have you seen this '[added]' in the changelog:
- len/sizeof/typeof will now warn if the given identifier is ambigious (i.e. if it could refer to both a type or a procedure/variable symbol), because currently the type will be preferred, which is typically unexpected, at least for len() on strings.
and the previous dkl's post:
http://www.freebasic.net/forum/viewtopi ... 09#p208609
(in topic: http://www.freebasic.net/forum/viewtopi ... =3&t=23624)
No, not seen.

I understand this behavior to my created types. But now WinApi types will always give such notice. And it's not very nice.
dkl
Site Admin
Posts: 3235
Joined: Jul 28, 2005 14:45
Location: Germany

Re: Version 1.03.0

Post by dkl »

Well, in those cases (type + procedure) the warning shouldn't be shown, because sizeof() can't be used on procedures anyways. So these are false-positives, that should be easy to fix though.
dodicat
Posts: 7983
Joined: Jan 10, 2006 20:30
Location: Scotland

Re: Version 1.03.0

Post by dodicat »

D.J.Peters wrote:Thank you DKL you are my hero :-)

Do you have a air conditioner ? it's too warm here.

Joshy
The heat wave hasn't reached here yet.

But, in the very slim chance that it might, I popped down to Lidl's today and plugged it in to Version 1.03.0 thanks to dkl.

Code: Select all



Dim as string zz = _
"C4278241280BM498,197M+24,2M+17,15M+12,47M+0,61M+-3,78"_
&"M+0,63M+3,77M+44,36M+43,13M+58,-3M+69,-3"_
&"M+25,7M+7,53M+2,9M+-509,-4M+18,-66M+24,-5"_
&"M+67,-5M+73,-22M+6,-77M+-1,-134M+-2,-96M+4,-38"_
&"M+20,-8"_
&"BM+6,205P4287401100,4278241280"_
&"BM+-37,149M+97,0"_
&"BM+-41,65"_
&"P4282598211,4278241280"
Dim as string zz2 = _
"C1BM501,250M500,250M+-49,-100"_
&"M+99,0M+-50,99M+100,-50M+-1,100M+-98,-51M+48,98"_
&"M+-98,3M+49,-100M+-98,49M+-3,-100M+102,50"_
&"BM+-10,-67"_
&"P4294904576,1"_
&"BM+-62,67P4294904576,1"_
&"BM+133,-3P4294904576,1"_
&"BM+-63,61P4294904576,1"

Dim as string zz3 = _
"C4294967295BM498,149M+1,50M+-2,47M+2,201"_
&"BM+152,-198"_
&""_
&"BM+49,1M+-200,1M+-201,-2"_
&"BM+4,-77M+36,-75"_
&"M+63,-46M+93,-4M+101,-1M+65,60M+33,94M+5,51"_
&"M+-8,58M+-36,63M+-78,64M+-77,11M+-112,-34M+-77,-50"_
&"M+-16,-91M+8,-100"_
&"BM+20,-37M+5,238"_
&"BM+31,-292M+2,315"_
&""_
&"BM+37,-339M+2,358"_
&"BM+31,-366M+3,379"_
&"BM+36,-379M+5,390"_
&""_
&"BM+52,-394M+6,395"_
&"BM+30,-392M+10,382"_
&"BM+30,-374M+3,352"_
&""_
&"BM+34,-320M+1,297"_
&"BM+44,-204M+-6,148"_
&"BM+-323,-243M+284,1"_
&""_
&"BM+-316,37M+0,0M+343,1"_
&"BM+-360,41M+379,9"_
&""_
&"BM+-386,27M+394,-1"_
&"BM+-396,45M+401,-2"_
&"BM+-400,52M+397,1"_
&""_
&"BM+-388,42M+357,16"_
&"BM+-321,31M+289,3"_
&"BM+-215,34M+175,0"_
&""


Screen 20,32
dim as integer a
do
    a+=1
    screenlock
    cls
draw "Ta" &0
Draw zz
draw "Ta" &a
draw zz2
draw "Ta" &0
draw zz3
screenunlock
sleep 1,1
loop until len(inkey)
Sleep


 
P.S.
I was running this on the GIT version 1.03.0 -- OK
When I run on the official version 1.03.0 it flashes red (paint overspill).
I wonder why?

i've had a look:
Doesn't flash when using 11/9/2014 libfbgfx.a, but flashes when using 1/7/2015 libfbgfx.a

Anyways, 1/7/2015 libfbgfx.a seems sound (I have tested some similar code).
So I have edited the above code.
counting_pine
Site Admin
Posts: 6323
Joined: Jul 05, 2005 17:32
Location: Manchester, Lancs

Re: Version 1.03.0

Post by counting_pine »

I did some work on Draw not long ago. I changed the way lines are drawn at arbitrary angles, so that they are drawn like normal Lines - a lot faster and potentially smoother.
I haven't run your code, but if it relies on pixel precision then it might just be that there are tiny gaps because lines end in slightly different places, rather than due to a new bug.

Oh, I also fixed the positioning of Paint commands - before, there was a good chance of them being a pixel out, particularly if you were using whole numbers. I can't remember if that was at the same time though..
dodicat
Posts: 7983
Joined: Jan 10, 2006 20:30
Location: Scotland

Re: Version 1.03.0

Post by dodicat »

Thanks counting_pine
I think it was due to a pixel out.
I use my own little thingy for drawing shapes, I drew some more and painted them, just being careful where the lines ended.
They were just fine.
Thank again.
counting_pine
Site Admin
Posts: 6323
Joined: Jul 05, 2005 17:32
Location: Manchester, Lancs

Re: Version 1.03.0

Post by counting_pine »

Regarding the sizeof(ambiguous_name) warnings, I think we need a way (if we don't already) of indicating that the type name is truly the desired choice.
There are some kludgy ways like prepending Const, or maybe typeof(*cast(ambiguous_name ptr,0)), but obviously they aren't ideal.
The simplest idea I can think of is to have a keyword parameter first, maybe Type for types or Var for expressions (if 'typeof((expr))' doesn't feel too much like a cheat).
So, for example, 'sizeof(type, T)'.
One catch, internally, is we'd just have to be careful to make sure it is really 'Type ,' and not something like 'Type<T>(...)'.
grindstone
Posts: 862
Joined: May 05, 2015 5:35
Location: Germany

Re: Version 1.03.0

Post by grindstone »

Great work!

Till now the new version works here with absolutely no problems!

Regards
grinddstone
Dinosaur
Posts: 1481
Joined: Jul 24, 2005 1:13
Location: Hervey Bay (.au)

Re: Version 1.03.0

Post by Dinosaur »

Hi All

Great to see FB moving ahead, many thanks to the developers.

Using the Dos version my app compiled without problems.
Compiling the same app with Win32 shows that "load_font" is missing from "liballegro.dll.a"
liballeg.a is not included with the Dos version.

Replacing it with my older version solves the problem.
However my older version is about 62k larger.

Is this a simple oversight ? or have a lot of the functions been eliminated or do they cause clashes with other libraries ?

Regards
aloberoger
Posts: 507
Joined: Jan 13, 2009 19:23

Re: Version 1.03.0

Post by aloberoger »

Good work ,thank you for that too
once again a suggestion; FB supports the virtual classes since version 0.91 I believe
and always one dodges the declarations referencing virtual classes in the headers there.
Here is simple the first two files to extend Win/guiddef.bi and Win/Unknownbase.bi
the small made modifications are easy to include/understand.
These two headers wided, one can extend the other headers according to the needs, but the first two are necessary
guidef.bi

Code: Select all

'' FreeBASIC binding for mingw-w64-v4.0.1

#pragma once

#include once "_mingw.bi"



#define GUID_DEFINED

type _GUID
	Data1 as ulong
	Data2 as ushort
	Data3 as ushort
	Data4(0 to 7) as ubyte
end type

type GUID as _GUID


 

#Ifdef DEFINE_GUID
#undef DEFINE_GUID
#EndIf

 
#Define DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) EXTERN Name As Const GUID  : Dim Name As Const GUID= ( l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } )
#Define DEFINE_OLEGUID(name, l, w1, w2) DEFINE_GUID (name, l, w1, w2, &hc0, 0, 0, 0, 0, 0, 0, &h46)


#define _GUIDDEF_H_
#define __LPGUID_DEFINED__
type LPGUID as GUID ptr
#define __LPCGUID_DEFINED__
type LPCGUID as const GUID ptr
#define __IID_DEFINED__
type IID as GUID
type LPIID as IID ptr
#define IID_NULL GUID_NULL
#define CLSID_DEFINED
type CLSID as GUID
type LPCLSID as CLSID ptr
#define CLSID_NULL GUID_NULL
type FMTID as GUID
type LPFMTID as FMTID ptr
#define FMTID_NULL GUID_NULL
#define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2)
#define _REFGUID_DEFINED
type REFGUID as const GUID const ptr
#define _REFIID_DEFINED
type REFIID as const IID const ptr
#define _REFCLSID_DEFINED
type REFCLSID as const IID const ptr
#define _REFFMTID_DEFINED
type REFFMTID as const IID const ptr
#define _SYS_GUID_OPERATORS_
#define InlineIsEqualGUID(rguid1, rguid2) (((((@(rguid1)->Data1)[0] = (@(rguid2)->Data1)[0]) andalso ((@(rguid1)->Data1)[1] = (@(rguid2)->Data1)[1])) andalso ((@(rguid1)->Data1)[2] = (@(rguid2)->Data1)[2])) andalso ((@(rguid1)->Data1)[3] = (@(rguid2)->Data1)[3]))
#define IsEqualGUID(rguid1, rguid2) (memcmp(rguid1, rguid2, sizeof(GUID)) = 0)
#define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
#define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)

Private Operator  = OverLoad( ByRef guid1 As GUID  , ByRef guid2 As GUID) As BOOL
     return IsEqualGUID(@guid1,@guid2) 
End Operator 

Private Operator  = OverLoad( ByVal guid1 As GUID ptr , ByRef guid2 As GUID) As BOOL
     return IsEqualGUID(guid1,@guid2) 
End Operator 

Private Operator  = OverLoad( ByRef guid1 As GUID  , ByRef guid2 As GUID Ptr) As BOOL
     return IsEqualGUID(@guid1,guid2) 
End Operator 

Private  Operator  <> OverLoad( ByRef guid1 As GUID  , ByRef guid2 As GUID) As BOOL
     return Not(IsEqualGUID(@guid1,@guid2)) 
End Operator 

Private Operator  <> OverLoad( ByVal guid1 As GUID ptr , ByRef guid2 As GUID) As BOOL
     return Not(IsEqualGUID(guid1,@guid2)) 
End Operator 

Private Operator <> OverLoad( ByRef guid1 As GUID  , ByRef guid2 As GUID Ptr) As BOOL
     return Not(IsEqualGUID(@guid1,guid2)) 
End Operator 


#define _SYS_GUID_OPERATOR_EQ_
operator are quite usefull

Unknownbase.bi

Code: Select all

'' FreeBASIC binding for mingw-w64-v4.0.1

#pragma once

extern "Windows"

#define __unknwnbase_h__
#define __IUnknown_FWD_DEFINED__
#define __AsyncIUnknown_FWD_DEFINED__
#define __IClassFactory_FWD_DEFINED__
#define __IUnknown_INTERFACE_DEFINED__
type IUnknown as IUnknown_
type LPUNKNOWN as IUnknown ptr
extern IID_IUnknown as const GUID

#Ifndef _FB_COM_VTBL_
type IUnknown_ extends object
	Declare abstract Function QueryInterface( byval riid as const IID const ptr, byval ppvObject as any ptr ptr) as HRESULT
	Declare abstract Function AddRef() as ULONG
	Declare abstract Function Release() as ULONG
end Type

#Else

type IUnknownVtbl
	QueryInterface as function(byval This as IUnknown ptr, byval riid as const IID const ptr, byval ppvObject as any ptr ptr) as HRESULT
	AddRef as function(byval This as IUnknown ptr) as ULONG
	Release as function(byval This as IUnknown ptr) as ULONG
end type

type IUnknown_
	lpVtbl as IUnknownVtbl ptr
end type

#define IUnknown_QueryInterface(This, riid, ppvObject) (This)->lpVtbl->QueryInterface(This, riid, ppvObject)
#define IUnknown_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IUnknown_Release(This) (This)->lpVtbl->Release(This)

#EndIf

declare function IUnknown_QueryInterface_Proxy(byval This as IUnknown ptr, byval riid as const IID const ptr, byval ppvObject as any ptr ptr) as HRESULT
declare sub IUnknown_QueryInterface_Stub(byval This as IRpcStubBuffer ptr, byval pRpcChannelBuffer as IRpcChannelBuffer ptr, byval pRpcMessage as PRPC_MESSAGE, byval pdwStubPhase as DWORD ptr)
declare function IUnknown_AddRef_Proxy(byval This as IUnknown ptr) as ULONG
declare sub IUnknown_AddRef_Stub(byval This as IRpcStubBuffer ptr, byval pRpcChannelBuffer as IRpcChannelBuffer ptr, byval pRpcMessage as PRPC_MESSAGE, byval pdwStubPhase as DWORD ptr)
declare function IUnknown_Release_Proxy(byval This as IUnknown ptr) as ULONG
declare sub IUnknown_Release_Stub(byval This as IRpcStubBuffer ptr, byval pRpcChannelBuffer as IRpcChannelBuffer ptr, byval pRpcMessage as PRPC_MESSAGE, byval pdwStubPhase as DWORD ptr)
#define __AsyncIUnknown_INTERFACE_DEFINED__
extern IID_AsyncIUnknown as const GUID
type AsyncIUnknown as AsyncIUnknown_

#Ifndef _FB_COM_VTBL_
type AsyncIUnknown_ extends Iunknown
	Declare abstract Function Begin_QueryInterface(ByVal riid as const IID const ptr) as HRESULT
	Declare abstract Function Finish_QueryInterface(ByVal ppvObject as any ptr ptr) as HRESULT
	Declare abstract Function Begin_AddRef() as HRESULT
	Declare abstract Function Finish_AddRef() as ULONG
	Declare abstract Function Begin_Release() as HRESULT
	Declare abstract Function Finish_Release() as ULONG
End Type

#Else

type AsyncIUnknownVtbl
	QueryInterface as function(byval This as AsyncIUnknown ptr, byval riid as const IID const ptr, byval ppvObject as any ptr ptr) as HRESULT
	AddRef as function(byval This as AsyncIUnknown ptr) as ULONG
	Release as function(byval This as AsyncIUnknown ptr) as ULONG
	Begin_QueryInterface as function(byval This as AsyncIUnknown ptr, byval riid as const IID const ptr) as HRESULT
	Finish_QueryInterface as function(byval This as AsyncIUnknown ptr, byval ppvObject as any ptr ptr) as HRESULT
	Begin_AddRef as function(byval This as AsyncIUnknown ptr) as HRESULT
	Finish_AddRef as function(byval This as AsyncIUnknown ptr) as ULONG
	Begin_Release as function(byval This as AsyncIUnknown ptr) as HRESULT
	Finish_Release as function(byval This as AsyncIUnknown ptr) as ULONG
end type

type AsyncIUnknown_
	lpVtbl as AsyncIUnknownVtbl ptr
end type

#define AsyncIUnknown_QueryInterface(This, riid, ppvObject) (This)->lpVtbl->QueryInterface(This, riid, ppvObject)
#define AsyncIUnknown_AddRef(This) (This)->lpVtbl->AddRef(This)
#define AsyncIUnknown_Release(This) (This)->lpVtbl->Release(This)
#define AsyncIUnknown_Begin_QueryInterface(This, riid) (This)->lpVtbl->Begin_QueryInterface(This, riid)
#define AsyncIUnknown_Finish_QueryInterface(This, ppvObject) (This)->lpVtbl->Finish_QueryInterface(This, ppvObject)
#define AsyncIUnknown_Begin_AddRef(This) (This)->lpVtbl->Begin_AddRef(This)
#define AsyncIUnknown_Finish_AddRef(This) (This)->lpVtbl->Finish_AddRef(This)
#define AsyncIUnknown_Begin_Release(This) (This)->lpVtbl->Begin_Release(This)
#define AsyncIUnknown_Finish_Release(This) (This)->lpVtbl->Finish_Release(This)

#EndIf

declare function AsyncIUnknown_Begin_QueryInterface_Proxy(byval This as AsyncIUnknown ptr, byval riid as const IID const ptr) as HRESULT
declare sub AsyncIUnknown_Begin_QueryInterface_Stub(byval This as IRpcStubBuffer ptr, byval pRpcChannelBuffer as IRpcChannelBuffer ptr, byval pRpcMessage as PRPC_MESSAGE, byval pdwStubPhase as DWORD ptr)
declare function AsyncIUnknown_Finish_QueryInterface_Proxy(byval This as AsyncIUnknown ptr, byval ppvObject as any ptr ptr) as HRESULT
declare sub AsyncIUnknown_Finish_QueryInterface_Stub(byval This as IRpcStubBuffer ptr, byval pRpcChannelBuffer as IRpcChannelBuffer ptr, byval pRpcMessage as PRPC_MESSAGE, byval pdwStubPhase as DWORD ptr)
declare function AsyncIUnknown_Begin_AddRef_Proxy(byval This as AsyncIUnknown ptr) as HRESULT
declare sub AsyncIUnknown_Begin_AddRef_Stub(byval This as IRpcStubBuffer ptr, byval pRpcChannelBuffer as IRpcChannelBuffer ptr, byval pRpcMessage as PRPC_MESSAGE, byval pdwStubPhase as DWORD ptr)
declare function AsyncIUnknown_Finish_AddRef_Proxy(byval This as AsyncIUnknown ptr) as ULONG
declare sub AsyncIUnknown_Finish_AddRef_Stub(byval This as IRpcStubBuffer ptr, byval pRpcChannelBuffer as IRpcChannelBuffer ptr, byval pRpcMessage as PRPC_MESSAGE, byval pdwStubPhase as DWORD ptr)
declare function AsyncIUnknown_Begin_Release_Proxy(byval This as AsyncIUnknown ptr) as HRESULT
declare sub AsyncIUnknown_Begin_Release_Stub(byval This as IRpcStubBuffer ptr, byval pRpcChannelBuffer as IRpcChannelBuffer ptr, byval pRpcMessage as PRPC_MESSAGE, byval pdwStubPhase as DWORD ptr)
declare function AsyncIUnknown_Finish_Release_Proxy(byval This as AsyncIUnknown ptr) as ULONG
declare sub AsyncIUnknown_Finish_Release_Stub(byval This as IRpcStubBuffer ptr, byval pRpcChannelBuffer as IRpcChannelBuffer ptr, byval pRpcMessage as PRPC_MESSAGE, byval pdwStubPhase as DWORD ptr)
#define __IClassFactory_INTERFACE_DEFINED__
type IClassFactory as IClassFactory_
type LPCLASSFACTORY as IClassFactory ptr
extern IID_IClassFactory as const GUID

#Ifndef _FB_COM_VTBL_
type IClassFactory_ extends Iunknown
	Declare abstract Function CreateInstance(ByVal pUnkOuter as IUnknown ptr, byval riid as const IID const ptr, byval ppvObject as any ptr ptr) as HRESULT
	Declare abstract Function LockServer(ByVal fLock as WINBOOL) as HRESULT
end Type

#Else

type IClassFactoryVtbl
	QueryInterface as function(byval This as IClassFactory ptr, byval riid as const IID const ptr, byval ppvObject as any ptr ptr) as HRESULT
	AddRef as function(byval This as IClassFactory ptr) as ULONG
	Release as function(byval This as IClassFactory ptr) as ULONG
	CreateInstance as function(byval This as IClassFactory ptr, byval pUnkOuter as IUnknown ptr, byval riid as const IID const ptr, byval ppvObject as any ptr ptr) as HRESULT
	LockServer as function(byval This as IClassFactory ptr, byval fLock as WINBOOL) as HRESULT
end type

type IClassFactory_
	lpVtbl as IClassFactoryVtbl ptr
end type

#define IClassFactory_QueryInterface(This, riid, ppvObject) (This)->lpVtbl->QueryInterface(This, riid, ppvObject)
#define IClassFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IClassFactory_Release(This) (This)->lpVtbl->Release(This)
#define IClassFactory_CreateInstance(This, pUnkOuter, riid, ppvObject) (This)->lpVtbl->CreateInstance(This, pUnkOuter, riid, ppvObject)
#define IClassFactory_LockServer(This, fLock) (This)->lpVtbl->LockServer(This, fLock)

#EndIf

declare function IClassFactory_RemoteCreateInstance_Proxy(byval This as IClassFactory ptr, byval riid as const IID const ptr, byval ppvObject as IUnknown ptr ptr) as HRESULT
declare sub IClassFactory_RemoteCreateInstance_Stub(byval This as IRpcStubBuffer ptr, byval pRpcChannelBuffer as IRpcChannelBuffer ptr, byval pRpcMessage as PRPC_MESSAGE, byval pdwStubPhase as DWORD ptr)
declare function IClassFactory_RemoteLockServer_Proxy(byval This as IClassFactory ptr, byval fLock as WINBOOL) as HRESULT
declare sub IClassFactory_RemoteLockServer_Stub(byval This as IRpcStubBuffer ptr, byval pRpcChannelBuffer as IRpcChannelBuffer ptr, byval pRpcMessage as PRPC_MESSAGE, byval pdwStubPhase as DWORD ptr)
declare function IClassFactory_CreateInstance_Proxy(byval This as IClassFactory ptr, byval pUnkOuter as IUnknown ptr, byval riid as const IID const ptr, byval ppvObject as any ptr ptr) as HRESULT
declare function IClassFactory_CreateInstance_Stub(byval This as IClassFactory ptr, byval riid as const IID const ptr, byval ppvObject as IUnknown ptr ptr) as HRESULT
declare function IClassFactory_LockServer_Proxy(byval This as IClassFactory ptr, byval fLock as WINBOOL) as HRESULT
declare function IClassFactory_LockServer_Stub(byval This as IClassFactory ptr, byval fLock as WINBOOL) as HRESULT

end extern
Post Reply