Einzelnen Beitrag anzeigen

Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#1

Anwendung mit DLL, für Delphi und C. C++ [ gelöst ]

  Alt 14. Jun 2009, 20:03
Guten Abend,

Ich bastle mir gerade eine Anwendung die in der Lage sein soll, DLL's dynamisch und auch Statisch mit ein zu binden.

Das alles ist dank der vielen Tutorials hier kein Problem gewesen. Ich habe mir dazu eine Demo Applikation gebastelt die ungefähr wie folgt aussieht :

HOST:
Delphi-Quellcode:

  (*
  Statisch eingebundene Procedure
  *)

Procedure ShowSomething(Value: Pchar); stdcall; external 'fst.dll';

  (*
  Dynamisch
  *)

Type
  TDLLProcedure = Procedure(Value: Pchar); stdcall;

Var
  DLLProcedure: TDLLProcedure;
  hDLL: THandle = 0;

Procedure LoadDLL_(DLLName: String);
Var
  buf: Array[0..144] Of char;
Begin
  If hdLl <> 0 Then unloadDLL_;
  hDLL := LoadLibrary(StrPCopy(buf, dllname));
  If hDLL <> 0 Then Begin
    Try
      @DLLProcedure := GetProcAddress(hdll, StrPCopy(buf, 'ShowSomething2'));
      (*
      warum wird hier auf @DLLProcedure geprüft und nicht auf
      DLLProcedure ??
      *)

      If @DLLProcedure = Nil Then
        Raise Exception.create('Error could not find Routine.');
    Except
      FreeLibrary(hDLL);
      hdll := 0;
      Raise;
    End;
  End
  Else
    Raise Exception.Create('Unable to load DLL.');
End;

Procedure UnloadDLL_;
Begin
  If hDLL <> 0 Then Begin
    FreeLibrary(hDLL);
    hdll := 0;
    DLLProcedure := Nil;
  End;
End;
So weit so gut, und das gezeigt funktioniert auch wunderbar.

Ich weis jetzt allerdings schon das später, in Ferner Zukunft meine DLL's durch DLL's ausgetauscht werden, welche in C, oder C++ geschrieben werden.

Und laut Delphi hilfe mus ich die Deklarationen dann anders schreiben, da ist die Rede von dem wörtchen "cdecl"

Nun die Frage , wie mus ich den Source in der Host Anwendung anpassen, bzw was mus ich meinen Bisherigen DLL's ändern damit das dann alles geht wie ichs mir vorstelle ?

Also sowohl der Statische Teil, wie auch das Dynamische Laden wird später mit den C DLL's sein.

Eigentlich klar, aber hier noch mal gezeigt, mein source aus den DLL's
Delphi-Quellcode:
Procedure ShowSomething(Value: Pchar); stdcall;
Var
  s: String;
Begin
  s := String(Value);
  showmessage('snd.dll:' + #13#10 + s);
End;

Procedure ShowSomething2(Value: Pchar); stdcall;
Var
  s: String;
Begin
  s := String(Value);
  showmessage('snd.dll:' + #13#10 + s);
End;

Exports

  ShowSomething,
  ShowSomething2;

Begin
End.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat