Funktion in dll wird nicht gefunden (Callfunction)
Verfasst: 14.09.2004 17:03
Hi, ich soll für nen kollegen ein kleines Programm schreiben, mit dem man filme aus einzelbildern erstellen kann.
Eigentlich dank der Aviserv-DLL keine große sache, aber ich beiß mir die zähne dran aus.
Hier mal der gesamte Code
Eigentlich sollte das so gehen (hmk, da sind wohl noch n paar sachen, die ich noch machen muss, aber egal).
auf jeden fall, mein Programm schafft es nicht,
auszuführen, es findet die funktion nicht
die dll ist aber geladen und diese codestelle 1:1 aus dem beispiel kopiert,
wo es funktioniert
Eigentlich dank der Aviserv-DLL keine große sache, aber ich beiß mir die zähne dran aus.
Hier mal der gesamte Code
Code: Alles auswählen
Structure AVI_INFO
aviWidth.l
aviHeight.l
aviFirstFrame.l
aviNumFrames.l
aviFPS.b
hwnd.l
EndStructure
Structure Movie
pfad.s
name.s
EndStructure
Enumeration
#Lib
EndEnumeration
Global INF.AVI_INFO
NewList Frames.Movie()
If OpenLibrary(#Lib,"AVIserv.dll")=0
MessageRequester("Test","nich geladen")
EndIf
Procedure BMP2AVI ()
INF.AVI_INFO
file.s = SaveFileRequester( "Save AVI", "", "AVI Video|*.avi", 0 )
If GetExtensionPart(file)<>".avi"
file=file+".avi"
EndIf
If CallFunction(#Lib,"AVI_Init")=0
MessageRequester("Fehler","Funktion nicht gefunden")
EndIf
FirstElement(Frames())
hBmp = LoadImage(0, Frames()\pfad)
If hBmp
If INF\aviWidth <= 0
INF\aviWidth = ImageWidth()
INF\aviHeight = ImageHeight()
INF\aviFPS = GetGadgetState(4)+1 ; Play 1 Frame per Second
;SetForegroundWindow_( INF\hwnd )
If CallFunction( #Lib, "OpenAVIForWrite", file.s, @INF ) = #False : EndIf
EndIf
EndIf
For b=2 To CountList(Frames())
SelectElement(Frames(),b)
hBmp = LoadImage(0, Frames()\pfad)
If hBmp
If INF\aviWidth + INF\aviHeight <> ImageWidth() + ImageHeight()
hBmp = ResizeImage( 0, INF\aviWidth, INF\aviHeight )
EndIf
If INF\aviWidth
If CallFunction( #Lib, "AddFrameToAVI", hBmp, -1 ) = #True ; -1 Autoincrement FrameNr
Frames + 1
EndIf
EndIf
EndIf
Debug "Hallo"
Next
CallFunction( #Lib, "CloseAVIStreams" )
EndProcedure
quit=0
UseJPEGImageDecoder()
FirstElement(Frames())
INF\hwnd=OpenWindow(1,100,100,700,500,#PB_Window_SystemMenu,"Filmmacher")
CreateGadgetList(INF\hwnd)
ListIconGadget(1,1,1,500,400,"Film",500,#PB_ListIcon_MultiSelect)
ButtonGadget(2,0,420,100,40,"Hinzufügen")
ButtonGadget(3,100,420,100,40,"Entfernen")
ComboBoxGadget(4,220,420,120,200)
SetGadgetState(1,1)
For a=0 To 26
AddGadgetItem(4,a,Str(a+1))
Next
SetGadgetState(4,25)
ButtonGadget(5,400,420,100,40,"Film erstellen")
Repeat
event=WaitWindowEvent()
If event=#PB_EventCloseWindow
quit=1
EndIf
If event=#PB_EventGadget
Select EventGadgetID()
Case 1
SelectElement(Frames(),GetGadgetState(1))
Case 2
name.s=OpenFileRequester("Bitte wählen sie die Bilder aus","","Bitmap und JPEG|*bmp;*jpg*",0,#PB_Requester_MultiSelection)
HideGadget(1,1);Das bringt mehr speed
While name
AddGadgetItem(1,GetGadgetState(1),GetFilePart(name))
AddElement(Frames())
Frames()\name=GetFilePart(name)
Frames()\pfad=name
name=NextSelectedFileName()
Wend
HideGadget(1,0)
Case 3
While GetGadgetState(1)>0
RemoveGadgetItem(1,GetGadgetState(1))
Wend
Case 5
BMP2AVI()
EndSelect
EndIf
Until quit
End
Eigentlich sollte das so gehen (hmk, da sind wohl noch n paar sachen, die ich noch machen muss, aber egal).
auf jeden fall, mein Programm schafft es nicht,
Code: Alles auswählen
If CallFunction( #Lib, "OpenAVIForWrite", file.s, @INF ) = #False : EndIf
die dll ist aber geladen und diese codestelle 1:1 aus dem beispiel kopiert,
wo es funktioniert