Seite 1 von 1

Funktion in dll wird nicht gefunden (Callfunction)

Verfasst: 14.09.2004 17:03
von Franky
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

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
auszuführen, es findet die funktion nicht
die dll ist aber geladen und diese codestelle 1:1 aus dem beispiel kopiert,
wo es funktioniert

Re: Funktion in dll wird nicht gefunden (Callfunction)

Verfasst: 14.09.2004 17:29
von Lars
Franky hat geschrieben:

Code: Alles auswählen

If CallFunction( #Lib, "OpenAVIForWrite", file.s, @INF ) = #False : EndIf
Da stimmt ja auch wahrscheinlich was nicht. Die Bedingung ist sehr schön
Formuliert, aber was dann ist, ist nicht definiert. Da ich die DLL nicht habe,
kann ich nicht testen, aber ich würde vermuten, dass da ein Fehler liegt.

Verfasst: 14.09.2004 17:36
von Franky
Nöp, da hatte ich eine messagerquesterabfrage drin, hab die rausgenommen, weil das ganze sonst bei leuten, die vielleicht ohne debugger kompilen zur nutzung des taskmanagers führen kann, was ich etwas unschön finde, so beendet sich das programm einfach

Re: Funktion in dll wird nicht gefunden (Callfunction)

Verfasst: 14.09.2004 17:50
von Falko
Lars hat geschrieben:
Franky hat geschrieben:

Code: Alles auswählen

If CallFunction( #Lib, "OpenAVIForWrite", file.s, @INF ) = #False : EndIf
... Da ich die DLL nicht habe,
kann ich nicht testen, aber ich würde vermuten, dass da ein Fehler liegt.
Das sollte wohl diese hier sein?

http://purebasic.myforums.net/viewtopic ... highlight=

Verfasst: 14.09.2004 17:52
von Franky
Joa :D


Sorry, is mir gerade mal aufgefallen, dass es die bei Purearea.net garnet gibt, dachte, da hätt ich die her, naja..... :oops:

Verfasst: 14.09.2004 23:12
von HeX0R
dll-aufrufe sin case-sensitiv !
Du solltest es also scho richtig schreiben :
OpenAVIforWrite

und nicht
OpenAVIForWrite