Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    12

    [Delphi] problema con dll

    Salve a tutti.
    Con gli opportuni strumemti ho generato da due *.avi una dll (popdll.dll) la quale contiene due risorse 'cool' e 'pr'
    Pensavo, quindi, di visualizzare il contenuto utilizzando MediaPlayer, ma non ci
    sono riuscito, viene visualizzato il seguente messaggio di errore: ...raised execption
    class eresenotfound with message 'Resource cool not found...
    Questo è stato fatto:

    unit usingRes;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    Spin, StdCtrls, ExtCtrls, Buttons, ComCtrls, MPlayer;

    type
    TForm1 = class(TForm)
    Button1: TButton;
    GroupBox6: TGroupBox;
    Button2: TBitBtn;
    MediaPlayer1: TMediaPlayer;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    private
    ResDLLMod : THandle;
    TempFileList : TStringList;
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    uses MMSystem;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    TempFileList := TStringList.create;
    ResDLLMod := LoadLibrary('popdll.dll');
    if ResDLLMod=0 then
    raise Exception.Create('Cannont load resource library.');
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Close;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var
    ResSt : TResourceStream;
    TempFile, TempPath : pchar;
    begin

    if ResDLLMod=0 then exit;
    ResSt := TResourceStream.Create(ResDLLMod, 'COOL', pchar('avi'));
    try
    GetMem(TempPath, MAX_PATH);
    GetMem(TempFile, MAX_PATH);
    GetTempPath(MAX_PATH, TempPath);
    GetTempFileName(TempPath, 'RES', 0, TempFile);

    StrCopy(TempFile, StrCat(TempFile, '.avi'));

    TempFileList.add(string(TempFile));
    ResSt.SaveToFile(string(TempFile));

    MediaPlayer1.Close;
    MediaPlayer1.filename := string(TempFile);
    MediaPlayer1.wait := true;
    MediaPlayer1.open;
    MediaPlayer1.Play;

    finally
    FreeMem(TempPath);
    FreeMem(TempFile);
    ResSt.free;
    end;
    end;

    procedure TForm1.FormDestroy(Sender: TObject);
    begin
    TempFileList.free;
    end;

    end.
    .................
    Note:

    La dLL è stata creata con un altro proggetto
    è stata quindi inserita nella stessa directory del nuovo progetto
    con Resource Hacker le avi vengono visualizzate.


    Spero che mi possiate aiutare
    Ciao da Matteo

  2. #2
    Se vuoi che qualcuno presti attenzione a tutto il codice che hai scritto ti consiglio di modificare il tuo post utilizzando l'apposito tag per formattare il codice:
    [*CODE][*/CODE] (senza *) rappresentato dal bottone #

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    12

    Non capisco

    Scusami ma non capisco cosa dovrei fare?
    Devo inserire # su ogni riga del codice?
    Ciao Matteo

  4. #4

    Re: Non capisco

    Originariamente inviato da MatAlb
    Scusami ma non capisco cosa dovrei fare?
    Devo inserire # su ogni riga del codice?
    Ciao Matteo
    no scrivere il codice tra [ code] il tuo codice.... :gren: [/ code]

    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Re: [Delphi] problema con dll

    Originariamente inviato da MatAlb
    Con gli opportuni strumemti ho generato da due *.avi una dll (popdll.dll) la quale contiene due risorse 'cool' e 'pr'
    Pensavo, quindi, di visualizzare il contenuto utilizzando MediaPlayer, ma non ci
    sono riuscito, viene visualizzato il seguente messaggio di errore: ...raised execption
    class eresenotfound with message 'Resource cool not found...

    ...

    ResSt := TResourceStream.Create(ResDLLMod, 'COOL', pchar('avi'));

    ...

    Hai sbagliato ad utilizzare il metodo Create di TResourceStream, in particolare il parametro ResType.

    Questo parametro di consente di specificare il tipo di risorsa scegliendo in una rosa di tipologie di risorse predefinite.
    Ti basta premere F1 posizionandoti sul metodo Create per verificare quali sono nella Guida in linea.

    I filmati AVI non rientrano nelle tipologie di risorse per così dire "standard", quindi devi utilizzare il tipo RC_DATA sia per immagazzinare i filmati nella DLL, sia per prelevarli attraverso il ResourceStream.

    Comunque, se la tua esigenza è specifica alla visualizzazione dei filmati AVI (non hai bisogno di utilizzare risorse diverse) puoi mantenere il codice con il quale hai caricato la libreria e usare il controllo TAnimate (nella pagina "Win32" della Palette dei Componenti) per visualizzare il filmato attraverso le proprietà ResHandle e ResName, di cui trovi informazioni sempre sulla Guida in linea.

    La proprietà ResHandle va impostata all'handle della libreria che costituisce il modulo nel quale è contenuta la risorsa, mentre ResName deve essere impostata al nome della risorsa filmato.

    Impostando la proprietà Active del controllo TAnimate a True, il filmato viene riprodotto; altre proprietà ti permettono poi di configurare loop e ripetizioni, se occorre.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    12

    problema dll

    Ciao
    Tanimate non lo posso usare poichè da quello che ho capito non permette di visualizzare delle *.avi multimediali (suono e video), quindi sono costretto ad usare MediaPlayer.
    Ho provato a fare alcuni cambiamenti ma non ho ottenuto nulla.
    Se si tratta di fare dei semplici cambiamenti me li potresti indicare?
    Grazie in ogni caso per aver risposto al messaggio.
    Ciao Matteo

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Nel programma che utilizzi per la creazione della DLL, usa RC_DATA come tipologia di risorsa; quando crei un oggetto TResourceStream, usa RC_DATA al posto di AVI:
    codice:
    ...
      TResourceStream.Create(ResDLLMod, 'COOL', RC_DATA);
    ...
    Purtroppo non ho il tempo materiale di cercare un filmato, prepararmi una DLL di esempio in cui incorporarlo, iniziare un progetto e fare prove tecniche; il codice che ho postato non è testato.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    12
    Avevo già apportato la modifica ma viene segnalato un errore:
    [Error] usingRes.pas(56): Undeclared identifier: 'RC_DATA'
    Dove sbaglio?
    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.