Page 1 of 2 1 2 LastLast
Results 1 to 15 of 25

Thread: Midi unit in Lazarus

  1. #1

    Midi unit in Lazarus

    Hallo,

    Omdat ik mijn programma's die ik nu in Delphi commercieel wil gaan toepassen en nog geen geld heb voor een Delhi licensie ben ik aan de slag gegaan met Lazarus.
    Alles ziet er vertrouwd uit maar het lukt me niet om een unit met midi routines toe te passen. In Delphi werkt deze zonder problemen.
    Ik krijg onderstaande foutmeldingen :

    Midi.pas(157,49) Error: Identifier not found "PHMIDIIN"
    Midi.pas(214,52) Hint: Conversion between ordinals and pointers is not portable
    Midi.pas(255,12) Error: Abstract methods can't be called directly
    Midi.pas(263,25) Error: Identifier not found "TMidiOutCaps"
    Midi.pas(263,25) Error: Error in type definition
    Midi.pas(268,70) Error: Identifier not found "TMidiOutCaps"
    Midi.pas(269,27) Error: Illegal qualifier
    Midi.pas(277,12) Error: Abstract methods can't be called directly

    Ik heb de unit via de unit conversie in Lazarus binngenhaald en toegevoegd aan mijn project. Te vinden in de bijlage.
    Tevens heb ik Lresources toegevoegd aan de 'Uses' volgens :

    Code:
    http://wiki.lazarus.freepascal.org/Lazarus_Faq#.27Identifier_not_found_LazarusResources.27.
    Ik snap niet wat ik verkeerd doe. Of is het niet mogelijk?

    Alvast bedankt.
    Attached Files Attached Files

  2. #2
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Zo te zien gebruik je MMSystem en is deze niet (volledig) geporteert naar Lazarus
    (Maar ik ken Lazarus verder niet, dussuh...)

    Greetz,

    Peter.
    TMemoryLeak.Create(Nil);

  3. #3
    Hallo Videoripper,

    Dank voor de tip.
    Ik heb deze beschrijving gevonden :

    HTML Code:
    http://www.hu.freepascal.org/lists/fpc-pascal/2003-July/005720.html
    Ik heb de file gedownload, aangepast en geopend in Lazarus. Ik moet hem nu compileren. Doe ik dat met 'Build file'?
    Als ik dat doe krijg ik twee foutmeldingen

    D:\Projecten\Lazarus\Componenten\vfw\VFW.PAS(1346, 28) Error: Identifier not found "class"
    D:\Projecten\Lazarus\Componenten\vfw\VFW.PAS(1348, 5) Error: Error in type definition
    D:\Projecten\Lazarus\Componenten\vfw\VFW.PAS(1348, 5) Fatal: Syntax error, ";" expected but "identifier PUBLIC" found

    Of moet het anders. Weliswaar ken je Lazarus niet maar Delphi komt op dit punt misschien overeen?
    Wat moet ik daarna met de gecompileerde file doen?

  4. #4
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Klinkt alsof FPC niet in Delphi mode staat. Probeer eens {$mode delphi} aan die unit toe te voegen, vlak onder de "interface" regel.

  5. #5
    Hallo Marco,

    Je tip heeft mee weer iets verder gebracht maar ik krijg nu foutmeldingen op stukjes code zoals er hieronder eentje staat weergegeven :

    Code:
     PAVIEditStream  = ^IAVIEditStream;
        IAVIEditStream  = class(IUnknown)
        public
            function    Cut(plStart, plLength: PDWORD; var ppResult: PAVISTREAM): HResult; virtual; stdcall; abstract;
            function    Copy(plStart, plLength: PDWORD; var ppResult: PAVISTREAM): HResult; virtual; stdcall; abstract;
            function    Paste(plPos: PDWORD; plLength: PDWORD; pstream: PAVISTREAM; lStart, lEnd: DWORD): HResult; virtual; stdcall; abstract;
            function    Clone(var ppResult: PAVISTREAM): HResult; virtual; stdcall; abstract;
            function    SetInfo(lpInfo: PAVISTREAMINFOW; cbInfo: DWORD): HResult; virtual; stdcall; abstract;
        end;
    1 van de foutmeldingen is :

    VFW.PAS(1381,8) Error: No matching implementation for interface method "IUnknown._Release:LongInt; StdCall;" found

    de andere melding zijn van gelijke strekking.

    Wat gaat hier fout? De totale unit is ook in de bijlage te vinden.
    Ik heb redelijk wat ervaring met Delphi maar FPC is wat lastiger om iets aan de gang te krijgen
    Attached Files Attached Files

  6. #6
    Counting your refs Paul-Jan's Avatar
    Join Date
    Feb 2002
    Location
    Lage Zwaluwe
    Posts
    2,160
    Puur op basis van de post (zonder naar de attachment gekeken te hebben): Dat codefragment ziet er nogal vreemd uit, ook onder Delphi zou dat niet moeten compileren, met een soortgelijke foutmelding. Weet je zeker dat je dit ge-copy-paste hebt?

    Er staat class(IUnknown), wat een verkorte verzie is voor class(TObject, IUnknown). TObject implementeert addRef, release en queryInterface niet, dus dat zal IAVIEditStream zelf moeten doen. Dat gebeurt niet, dus klaagt de compiler dat de implementatie van die methods ontbreekt.

    Gezien de I prefix lijkt het waarschijnlijk dat er IAVIEditSTream = Interface(IUnknown) had moeten staan.

    [Edit]Weer wat geleerd. De unit Ole2 (oud) definieert IUnknown nog als class, waardoor bovenstaande constructie mogelijk wordt. Dit stamt uit de tijd dat Delphi nog niet zo aan echte interfaces deed (< Delphi 3). Je kunt dus uit twee oplossingsrichtingen kiezen: die oeroude IUnknown definitie uit Delphi's OLE2 zo goed mogelijk overnemen, wat FPC kennelijk standaard niet doet. Het alternatief is om met ECHTE interfaces te gaan werken ipv classes, die zijn hier voor bedoeld. Je moet dan wel de hele unit even bijwerken, waar je waarschijnlijk niet echt op zit te wachten. [/Edit]
    Last edited by Paul-Jan; 09-Jan-10 at 11:42.

  7. #7
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Mij viel het ook direct op (wat Paul-Jan zegt), en ik ben blij dat hij het al uitgezocht heeft.

    Free Pascal richt zich primair op Delphi7, met losse punten gekopieerd van wat daarna komt. En legacy die al oud was in D7 wordt doorgaans niet meer geimplementeerd.

    (zo zijn er ook diverse "win32" resourcestrings en sysutils functies niet meer, alleen de bij D6 geintroduceerde "OS" versies)

    Ik zit nu op een ouwe powerpc mini mac, en kan niet echt met Windows headers aan de slag. Maar als ik weer eens onder windows zit zal ik eens kijken.

  8. #8
    Hallo,

    Dank voor de antwoorden.
    Wat ik niet helemaal snap (en dat is niet omdat ik er geen werk in wil steken maar meer omdat ik de aanpassing van mmsystem niet helemaal snap.) :

    Ik heb gezocht op internet naar een FPC mmsystem unit. Ik heb dit gevonden :

    HTML Code:
    http://www.freepascal.org/packages/mmsystem.html
    en
    HTML Code:
    http://bugs.freepascal.org/view.php?id=10899
    Het enige wat er gedownload kan worden is een patch. Geen unit.

    Moet ik het overigens zo zien dat wanneer Delphi bijvoorbeeld de MMSystem unit compileert deze opgenomen wordt in FPC.exe om verder gebruikt te worden?
    Ik zie door de pas file de source niet meer.........

  9. #9
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    De unit mmsystem zit bij iedere windows release.

    De voorgecompileerde versie kan je zien in fpc\<versie>\units\winunits-base (mmsystem.o .ppu en libpmmsystem.a)

    In het source archief van FPC kan je de source vinden in
    packages/winunits-base/src/mmsystem.pp

    FPC en Delphi delen geheel niets, en zijn totaal onafhankelijk.

    De kern is de message van Paul-jan. De spullen die je gevonden hebt zijn voor een antieke Delphi versie waar FPC nooit mee compatible geweest is.

  10. #10
    Hallo Marco,

    Ik had niet uit het verhaal van Paul-Jan opgemaakt dat een en ander niet compatibel was. Ligt niet aan Paul-Jan overigens....

    Ik heb de files die je noemt gevonden. In de .pp file vind ik ook oa de identifiers terug waarvan ik een 'missing' melding krijg.
    Wat moet ik nu doen om de .pp (of de gecompileerde files) te gebruiken in mijn project samen met mijn midi routines?
    Installeren als package lijkt me niet....

  11. #11
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    De volgende zip bevat een versie die is geupdate naar D4+ syntax.

    http://www.stack.nl/~marcov/vfw.zip

    Ik heb overigens de auteur van deze unit (die freeware is) gevraagd of ie wil toestaan deze met FPC mee te leveren.

    Tevens heb ik de identifiers die in de eerste post mistten (tmidioutcaps en phmidiin toegevoegd aan mmsystem. Dit waren aliases die ontbraken. (MIDIOUTDCAPS en LPHMIDIIN bestaan wel, en zijn de Microsoft namen. De corresponderende Codegear T en P aliasen waren voor deze types niet toegevoegd).
    Last edited by marcov; 10-Jan-10 at 17:17.

  12. #12
    Bedankt Marco,

    Ik ga er mee aan de slag

  13. #13
    Het compilen is gelukt !!!!!

    Ik heb nu de volgende bestanden :

    libimpvfw.a
    vfw.o
    vfw.ppu

    Ik moet nu (vermoed ik ) duidelijk maken in Lazarus of mijn project hoe dat deze files gebruikt moeten worden.
    Hoe doe ik dat?

  14. #14
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Gewoon de source vfw.pas bij je project sources zetten in lazarus, en in je applicatie source "uses vfw;" gebruiken.

    Die drie bestanden samen zijn zo ongeveer hetzelfde als wat een dcu in Delphi is.

  15. #15
    Ik heb nu de uses mmsystem verwijderd uit de midi unit en in mijn main vfw bij de uses gezet.
    De gebruikelijke foutmeldingen zijn er niet meer !
    Ik heb nu nog 1 nieuwe (4 maar het betreft allemaal MMResult :

    Midi.pas(40,26) Error: Identifier not found "MMResult"
    Midi.pas(40,26) Error: Error in type definition
    Midi.pas(41,50) Error: Identifier not found "MMResult"
    Midi.pas(43,35) Error: Identifier not found "MMResult"
    Midi.pas(107,1) Fatal: There were 4 errors compiling module, stopping

    Ontbreekt deze dan nog in vfw.pas?

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •