Update dll support with new functions

Share your advanced PureBasic knowledge/code with the community.
Justin
Addict
Addict
Posts: 948
Joined: Sat Apr 26, 2003 2:49 pm

Update dll support with new functions

Post by Justin »

Code updated For 5.20+

Not all functions in windows dlls are defined in the libs, i used this to update them. i needed VarDiv in oleaut32 wich is not included.

the idea is to use the code above with the lib definition in \PureBasic\PureLibraries\Windows , it will read it an output a .pbl file, then you simply append the new functions with the number of parameters and use the pb dll importer with it

Code: Select all

libFile$ = "C:\PureBasic\PureLibraries\Windows\oleaut32"

outpbl$ = "c:\test.pbl"

bFName = AllocateMemory(100)

If OpenFile(1, outpbl$)=0 : End : EndIf

If ReadFile(0, libFile$)
  ;dll name
  FileSeek(0,9)
  *pB.BYTE = bFName
  While #True
    ReadData(0,*pB, 1)
    If *pB\b = 0 : Break : EndIf
    *pB + 1
  Wend
  dllName$ = PeekS(bFName)
  Debug dllName$
  WriteStringN(0,dllName$ + ".dll")
  
  ;Functions
  While Eof(0)=0
    
    *pB.BYTE = bFName
    While #True
      ReadData(0,*pB, 1)
      If *pB\b = 0 : Break : EndIf
      *pB + 1
    Wend
    
    fName$ = PeekS(bFName)
    nParams = ReadByte(0) ;n params
    ReadByte(0) ;advance file pointer
    
    Debug fName$
    Debug nParams
    
    WriteStringN(1,fName$ + " " + Str(nParams))
  Wend
  
  CloseFile(0)
  CloseFile(1)
Else
  Debug "failed to open lib file"
EndIf

FreeMemory(bFName)
here's the resulting pbl with VarDiv to be used with the dll importer

Code: Select all

OLEAUT32.dll
BstrFromVector 2
BSTR_UserFree 2
BSTR_UserMarshal 3
BSTR_UserSize 3
BSTR_UserUnmarshal 3
ClearCustData 1
CreateDispTypeInfo 3
CreateErrorInfo 1
CreateStdDispatch 4
CreateTypeLib 3
CreateTypeLib2 3
DispCallFunc 8
DispGetIDsOfNames 4
DispGetParam 5
DispInvoke 8
DosDateTimeToVariantTime 3
GetActiveObject 3
GetAltMonthNames 2
GetErrorInfo 2
LHashValOfNameSys 3
LoadRegTypeLib 5
LoadTypeLib 2
LoadTypeLibEx 3
LPSAFEARRAY_Marshal 4
LPSAFEARRAY_Size 4
LPSAFEARRAY_Unmarshal 4
LPSAFEARRAY_UserFree 2
LPSAFEARRAY_UserMarshal 3
LPSAFEARRAY_UserSize 3
LPSAFEARRAY_UserUnmarshal 3
OaBuildVersion 0
OACreateTypeLib2 3
OleCreateFontIndirect 3
OleCreatePictureIndirect 4
OleCreatePropertyFrame 11
OleCreatePropertyFrameIndirect 1
OleIconToCursor 2
OleLoadPicture 5
OleLoadPictureFile 5
OleLoadPicturePath 6
OleSavePictureFile 2
OleTranslateColor 3
QueryPathOfRegTypeLib 5
RegisterActiveObject 4
RegisterTypeLib 3
RevokeActiveObject 2
SafeArrayAccessData 2
SafeArrayAllocData 1
SafeArrayAllocDescriptor 2
SafeArrayCopy 2
SafeArrayCopyData 2
SafeArrayCreate 3
SafeArrayCreateVector 3
SafeArrayDestroy 1
SafeArrayDestroyData 1
SafeArrayDestroyDescriptor 1
SafeArrayGetDim 1
SafeArrayGetElement 3
SafeArrayGetElemsize 1
SafeArrayGetLBound 3
SafeArrayGetUBound 3
SafeArrayLock 1
SafeArrayPtrOfIndex 3
SafeArrayPutElement 3
SafeArrayRedim 2
SafeArrayUnaccessData 1
SafeArrayUnlock 1
SetErrorInfo 2
SysAllocString 1
SysAllocStringByteLen 2
SysAllocStringLen 2
SysFreeString 1
SysReAllocString 2
SysReAllocStringLen 3
SysStringByteLen 1
SysStringLen 1
SystemTimeToVariantTime 2
UnRegisterTypeLib 5
UserBSTR_free_inst 1
UserBSTR_free_local 1
UserBSTR_from_local 2
UserBSTR_to_local 2
UserEXCEPINFO_free_inst 1
UserEXCEPINFO_free_local 1
UserEXCEPINFO_from_local 2
UserEXCEPINFO_to_local 2
UserHWND_free_inst 1
UserHWND_free_local 1
UserHWND_from_local 2
UserHWND_to_local 2
UserMSG_free_inst 1
UserMSG_free_local 1
UserMSG_from_local 2
UserMSG_to_local 2
UserVARIANT_free_inst 1
UserVARIANT_free_local 1
UserVARIANT_from_local 2
UserVARIANT_to_local 2
VarBoolFromCy 3
VarBoolFromDate 3
VarBoolFromDec 2
VarBoolFromDisp 3
VarBoolFromI1 2
VarBoolFromI2 2
VarBoolFromI4 2
VarBoolFromR4 2
VarBoolFromR8 3
VarBoolFromStr 4
VarBoolFromUI1 2
VarBoolFromUI2 2
VarBoolFromUI4 2
VarBstrFromBool 4
VarBstrFromCy 5
VarBstrFromDate 5
VarBstrFromDec 4
VarBstrFromDisp 4
VarBstrFromI1 4
VarBstrFromI2 4
VarBstrFromI4 4
VarBstrFromR4 4
VarBstrFromR8 5
VarBstrFromUI1 4
VarBstrFromUI2 4
VarBstrFromUI4 4
VarCyFromBool 2
VarCyFromDate 3
VarCyFromDec 2
VarCyFromDisp 3
VarCyFromI1 2
VarCyFromI2 2
VarCyFromI4 2
VarCyFromR4 2
VarCyFromR8 3
VarCyFromStr 4
VarCyFromUI1 2
VarCyFromUI2 2
VarCyFromUI4 2
VarDateFromBool 2
VarDateFromCy 3
VarDateFromDec 2
VarDateFromDisp 3
VarDateFromI1 2
VarDateFromI2 2
VarDateFromI4 2
VarDateFromR4 2
VarDateFromR8 3
VarDateFromStr 4
VarDateFromUdate 3
VarDateFromUI1 2
VarDateFromUI2 2
VarDateFromUI4 2
VarDecFromBool 2
VarDecFromCy 3
VarDecFromDate 3
VarDecFromDisp 3
VarDecFromI1 2
VarDecFromI2 2
VarDecFromI4 2
VarDecFromR4 2
VarDecFromR8 3
VarDecFromStr 4
VarDecFromUI1 2
VarDecFromUI2 2
VarDecFromUI4 2
VarI1FromBool 2
VarI1FromCy 3
VarI1FromDate 3
VarI1FromDec 2
VarI1FromDisp 3
VarI1FromI2 2
VarI1FromI4 2
VarI1FromR4 2
VarI1FromR8 3
VarI1FromStr 4
VarI1FromUI1 2
VarI1FromUI2 2
VarI1FromUI4 2
VarI2FromBool 2
VarI2FromCy 3
VarI2FromDate 3
VarI2FromDec 2
VarI2FromDisp 3
VarI2FromI1 2
VarI2FromI4 2
VarI2FromR4 2
VarI2FromR8 3
VarI2FromStr 4
VarI2FromUI1 2
VarI2FromUI2 2
VarI2FromUI4 2
VarI4FromBool 2
VarI4FromCy 3
VarI4FromDate 3
VarI4FromDec 2
VarI4FromDisp 3
VarI4FromI1 2
VarI4FromI2 2
VarI4FromR4 2
VarI4FromR8 3
VarI4FromStr 4
VarI4FromUI1 2
VarI4FromUI2 2
VarI4FromUI4 2
VariantChangeType 4
VariantChangeTypeEx 5
VariantClear 1
VariantCopy 2
VariantCopyInd 2
VariantInit 1
VariantTimeToDosDateTime 4
VariantTimeToSystemTime 3
VARIANT_UserFree 2
VARIANT_UserMarshal 3
VARIANT_UserSize 3
VARIANT_UserUnmarshal 3
VarNumFromParseNum 4
VarParseNumFromStr 5
VarR4FromBool 2
VarR4FromCy 3
VarR4FromDate 3
VarR4FromDec 2
VarR4FromDisp 3
VarR4FromI1 2
VarR4FromI2 2
VarR4FromI4 2
VarR4FromR8 3
VarR4FromStr 4
VarR4FromUI1 2
VarR4FromUI2 2
VarR4FromUI4 2
VarR8FromBool 2
VarR8FromCy 3
VarR8FromDate 3
VarR8FromDec 2
VarR8FromDisp 3
VarR8FromI1 2
VarR8FromI2 2
VarR8FromI4 2
VarR8FromR4 2
VarR8FromStr 4
VarR8FromUI1 2
VarR8FromUI2 2
VarR8FromUI4 2
VarUdateFromDate 4
VarUI1FromBool 2
VarUI1FromCy 3
VarUI1FromDate 3
VarUI1FromDec 2
VarUI1FromDisp 3
VarUI1FromI1 2
VarUI1FromI2 2
VarUI1FromI4 2
VarUI1FromR4 2
VarUI1FromR8 3
VarUI1FromStr 4
VarUI1FromUI2 2
VarUI1FromUI4 2
VarUI2FromBool 2
VarUI2FromCy 3
VarUI2FromDate 3
VarUI2FromDec 2
VarUI2FromDisp 3
VarUI2FromI1 2
VarUI2FromI2 2
VarUI2FromI4 2
VarUI2FromR4 2
VarUI2FromR8 3
VarUI2FromStr 4
VarUI2FromUI1 2
VarUI2FromUI4 2
VarUI4FromBool 2
VarUI4FromCy 3
VarUI4FromDate 3
VarUI4FromDec 2
VarUI4FromDisp 3
VarUI4FromI1 2
VarUI4FromI2 2
VarUI4FromI4 2
VarUI4FromR4 2
VarUI4FromR8 3
VarUI4FromStr 4
VarUI4FromUI1 2
VarUI4FromUI2 2
VectorFromBstr 2
VarDiv 3
traumatic
PureBasic Expert
PureBasic Expert
Posts: 1661
Joined: Sun Apr 27, 2003 4:41 pm
Location: Germany
Contact:

Re: Update dll support with new functions

Post by traumatic »

Nice! :)
Good programmers don't comment their code. It was hard to write, should be hard to read.
Justin
Addict
Addict
Posts: 948
Joined: Sat Apr 26, 2003 2:49 pm

Post by Justin »

A little cleaner/faster code using space(), btw the output pbl shows some strange names like LPSAFEARRAY_UserFree , BSTR_UserMarshal, that do not appear to be api calls. PB bug??

Code: Select all

Procedure ReadStr(*pB.BYTE)
	While #TRUE
		ReadData(*pB, 1)
		If *pB\b = 0 : Break : EndIf 
		*pB + 1
	Wend 
EndProcedure 

;- #CODE
libFile$ = "C:\PureBasic\PureLibraries\Windows\oleaut32"

outpbl$ = "c:\test.pbl"

bFName$ = Space(100)

If OpenFile(1, outpbl$)=0 : End : EndIf 

If ReadFile(0, libFile$)
	;dll name
	FileSeek(9) 
	ReadStr(@bFName$)
	Debug bFName$ 

	UseFile(1) : WriteStringN(bFName$ + ".dll")

	;Functions
	While Eof(0)=0
		UseFile(0)
		ReadStr(@bFName$)
	
		nParams = ReadByte() 
		ReadByte() ;advance file pointer

		Debug bFName$
		Debug nParams 
		
		UseFile(1) : WriteStringN(bFName$ + " " + Str(nParams))
	Wend 
	
	CloseFile(0)
	CloseFile(1)
Else
	Debug "failed to open lib file"
EndIf 
dell_jockey
Enthusiast
Enthusiast
Posts: 767
Joined: Sat Jan 24, 2004 6:56 pm

Post by dell_jockey »

Hi Justin,

very nice code and very timely.

It's astonishing how often this forum sort of presents code that I happen to need at that particular junction in time... really amazing...

thanks again!
cheers,
dell_jockey
________
http://blog.forex-trading-ideas.com
Post Reply