Einzelnen Beitrag anzeigen

Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#45

Re: Preview: Audorra - Opensource Audiobibliothek (26.04.09)

  Alt 12. Jul 2009, 11:35
Hallo.

Als kleine Aktualisierung (ich habe trotz Sommerferien leider nicht allzuviel Zeit) eine kleine Übersicht über die neusten Entwicklungen:

Ich habe nun ein dynamisches Pluginsystem implementiert, welches ich in dieser Weise auch in Andorra einbinden werden. Dieses Pluginsystem erlaubt es, Module sowohl statisch (durch einfaches aufnehmen in die Uses-Klausel) als auch dynamish (aus einer DLL) zu linken - der Anwendung ist das egal.

Es existiert ein so genannter Registrationsserver (AcRegSrv, das Ac steht für "Andorra Commons"), der alle Module verwaltet:
Code:
AcRegSrv DbgDump
----------------

                          Name |                                           IdentStr | SrcID |    @Create
                               |                                                    |       |
                  TAcStoreNode |                         TAcPersistent.TAcStoreNode |     0 |    4217572
                TAcIntegerNode |          TAcPersistent.TAcStoreNode.TAcIntegerNode |     0 |    4217608
                  TAcFloatNode |            TAcPersistent.TAcStoreNode.TAcFloatNode |     0 |    4217644
                 TAcStringNode |           TAcPersistent.TAcStoreNode.TAcStringNode |     0 |    4217680
                   TAcBoolNode |             TAcPersistent.TAcStoreNode.TAcBoolNode |     0 |    4217716
                 TAcStreamNode |           TAcPersistent.TAcStoreNode.TAcStreamNode |     0 |    4217752
               TAuOpenALDriver |            TAcPersistent.TAuDriver.TAuOpenALDriver |     1 |   14695264
              TAuWaveOutDriver |           TAcPersistent.TAuDriver.TAuWaveOutDriver |     1 |   14696360
                 TAuWAVDecoder |             TAcPersistent.TAuDecoder.TAuWAVDecoder |     1 |   14699972
          TAuAcinerellaDecoder |      TAcPersistent.TAuDecoder.TAuAcinerellaDecoder |     1 |   14700932

Classes registered:    10
Current source id:     1
Von einem Modul werden Klassenname, Klassenhierarchie, Quellenidentifikationsnummer (also aus welchem Programmmodul (0 = lokal, >0 = aus einem anderen Plugin) das Plugin ist) und ein Pointer zum Konstruktor der Klasse gespeichert.

Eine DLL mit Zusatzmodulen ist sehr einfach zu erstellen. Die im oben gezeigten Beispiel gezeigte DLL sieht folgendermaßen aus:
Delphi-Quellcode:
library AudorraFoo;

uses
  AcPersistent,
  AuOpenAL, AuWaveOut32Driver, AuWav, AuAcinerella;

exports
  AcDLLInit,
  AcDLLFinalize,
  AcDLLExportClasses;

begin
end.
Möchte man die in der Uses-Klausel aufgeführten Module statisch verwenden, so sind sie einfach im Hauptprogramm einzubinden.

Ein Plugin kann ganz einfach geladen werden:
Delphi-Quellcode:
var
  plg: TAcPluginDLL;
begin
  plg := TAcPluginDLL.Create;
  plg.LoadPlugin('AudorraFoo.dll');
  plg.RegisterClasses(TAcPersistent);

  [...]

  plg.Free;
end;
Ich freue mich über eure Kommentare,
Andreas
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat