Basic Univers
#FileFonctionList = ""
#FileDLL = "web_cam.DLL"
#FileFonctionImport = "import.pbi"
#LibraryName = "TWAIN"
#hLibPointer = #LibraryName + "_hLib"
#Fonction_Init = #LibraryName + "_Init"
#Fonction_UnInit = #LibraryName + "_UnInit"
#PB__CallFunction = "CallFunctionFast"
#PB__GetFunctionMacro = "GetFunction_"
Global NewList Fonction.s()
DeleteFile(#FileFonctionImport)
hFileOut.l = CreateFile(#PB_Any, #FileFonctionImport)
If hFileOut
If Len(#FileFonctionList)
hFileIn.l = OpenFile(#PB_Any, #FileFonctionList)
If hFileIn
While Not(Eof(hFileIn))
line$ = ReadString(hFileIn)
If UCase(Left(line$, 5)) = "TWAIN"
AddElement(Fonction())
Fonction() = Trim(StringField(line$, 1, ";"))
EndIf
Wend
CloseFile(hFileIn)
EndIf
Else
hLib.l = OpenLibrary(#PB_Any, #FileDLL)
If hLib
ExamineLibraryFunctions(hLib)
While NextLibraryFunction()
AddElement(Fonction())
Fonction() = LibraryFunctionName()
Wend
EndIf
EndIf
If CountList(Fonction())
MaxLen.l = 0
ForEach Fonction()
If Len(Fonction()) > MaxLen
MaxLen = Len(Fonction())
EndIf
Next
MaxLen + 3
WriteStringN(hFileOut, ";- Automatic import")
WriteStringN(hFileOut, #LFCR$ + #LFCR$)
WriteStringN(hFileOut, #LFCR$ + "; Procedure GetFunction() edited !")
WriteStringN(hFileOut, "Procedure.l " + #PB__GetFunctionMacro + "(hLib.l, FctName.s)")
WriteStringN(hFileOut, " Protected hExternProcedure.l")
WriteStringN(hFileOut, " hExternProcedure = GetFunction(hLib, FctName)")
WriteStringN(hFileOut, " If hExternProcedure = #Null")
WriteStringN(hFileOut, " MessageRequester(" + Chr(34) + "Error While importing function" + Chr(34) + ", " + Chr(34) + "Can't find : " + Chr(34) + " + FctName + " + Chr(34) + "()" + Chr(34) + ", #MB_ICONERROR)")
WriteStringN(hFileOut, " EndIf")
WriteStringN(hFileOut, " ProcedureReturn hExternProcedure")
WriteStringN(hFileOut, "EndProcedure" + #LFCR$ + #LFCR$)
WriteStringN(hFileOut, ";- Declare all fonctions")
WriteStringN(hFileOut, "Declare " + #Fonction_Init + "(DLLName.s)")
WriteStringN(hFileOut, "Declare " + #Fonction_UnInit + "()")
ForEach Fonction()
WriteStringN(hFileOut, "Declare " + Fonction() + "()")
Next
WriteStringN(hFileOut, #LFCR$ + #LFCR$ + ";- Declare all globals var")
ForEach Fonction()
WriteStringN(hFileOut, "Global *" + Fonction() + ".l")
Next
WriteStringN(hFileOut, "Global " + #hLibPointer + ".l")
WriteStringN(hFileOut, #LFCR$ + #LFCR$ + ";- All functions wrapped")
WriteStringN(hFileOut, "Procedure.l " + #Fonction_Init + "(DLLName.s)")
WriteStringN(hFileOut, " " + #hLibPointer + " = OpenLibrary(#PB_Any, DLLName)")
WriteStringN(hFileOut, " If " + #hLibPointer)
ForEach Fonction()
WriteStringN(hFileOut, " *" + LSet(Fonction() + " = ", MaxLen, " ") + #PB__GetFunctionMacro + "(" + #hLibPointer + ", " + Chr(34) + Fonction() + Chr(34) + ")")
Next
WriteStringN(hFileOut, " EndIf")
WriteStringN(hFileOut, " ProcedureReturn " + #hLibPointer)
WriteStringN(hFileOut, "EndProcedure")
WriteStringN(hFileOut, #LFCR$ + "Procedure " + #Fonction_UnInit + "()")
WriteStringN(hFileOut, " If " + #hLibPointer)
WriteStringN(hFileOut, " CloseLibrary("+#hLibPointer+")")
WriteStringN(hFileOut, " EndIf")
WriteStringN(hFileOut, "EndProcedure")
ForEach Fonction()
WriteStringN(hFileOut, #LFCR$ + "; Function : " + Fonction() + "()")
WriteStringN(hFileOut, "Procedure.l " + Fonction() + "()")
WriteStringN(hFileOut, " Protected ReturnValue.l")
WriteStringN(hFileOut, " ReturnValue = " + #PB__CallFunction + "(*" + Fonction()+")")
WriteStringN(hFileOut, " ProcedureReturn ReturnValue")
WriteStringN(hFileOut, "EndProcedure")
Next
WriteStringN(hFileOut, #LFCR$ + #LFCR$ + "; ------------------------ Main --------------------")
WriteStringN(hFileOut, "Debug " + #Fonction_Init + "(" + Chr(34) + GetFilePart(#FileDLL) + Chr(34) + ")")
WriteStringN(hFileOut, #Fonction_UnInit + "()")
Else
MessageRequester("Attention", "Aucune fonction n'a été trouvée !", #MB_ICONWARNING)
EndIf
CloseFile(hFileOut)
EndIf