Funktion in dll wird nicht gefunden (Callfunction)

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Funktion in dll wird nicht gefunden (Callfunction)

Beitrag 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
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Benutzeravatar
Lars
Beiträge: 347
Registriert: 31.08.2004 23:53
Wohnort: Shanghai
Kontaktdaten:

Re: Funktion in dll wird nicht gefunden (Callfunction)

Beitrag 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.
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag 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
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Re: Funktion in dll wird nicht gefunden (Callfunction)

Beitrag 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=
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag 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:
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Beitrag von HeX0R »

dll-aufrufe sin case-sensitiv !
Du solltest es also scho richtig schreiben :
OpenAVIforWrite

und nicht
OpenAVIForWrite
Antworten