Newsgroup: it.comp.lang.delphi
Titolo: dll in Delphi

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

   ResSt := TResourceStream.Create(ResDLLMod, 'COOL', pchar('avi'));
non vorrei dire una stupidaggine, ma mi pare che i nomi delle risorse sono 
case sensitive.
Se è così, non potrebbe essere che il tipo di risorsa che hai indicato con 
"avi", nel file di risorse sia invece "AVI" ?
-- 
Mauro Falzari 
   [ 
http://digilander.libero.it/mauro.falzari
 ]
 
 "Se guardi nell'abisso, anche l'abisso guarda in te." 
   (Friedrich Nietzsche)

Ciao
Il problema è stato risolto creando una dll in Delphi e inserendo
direttamente le risorse con un opportuno strumento.
Seguendo la via classica RC > RES > DLL le risorse non vengono riconosciute,
sto cercando di capirne il motivo.
I nomi delle risorse dovrebbero essere case sensitive ma il tutto funziona
indifferentemente dal formato del carattere.
Avrei comunque due domemde.
1) Il nome della library deve coincidere con il nome con cui viene salvata
la dll? Nel mio caso funziona anche con nomi diversi.
2) La struttura di una dll creata in Delphi è la seguente:
   library Project1;
uses
  SysUtils,
  Classes;
{$R *.res}
begin
end.
Ho cancellato tutto per cui:
 library Project1;
end.
Premesso che la dll deve contenere solo risorse del tipo avi, bmp, ecc.
questa cancellazione può comportare dei problemi?
Ciao da Matteo