Avatar billede screwdriver Nybegynder
22. december 2004 - 11:05 Der er 4 kommentarer og
1 løsning

Eksempel på dll i delphi .net

Hej

Jeg forsøger at lave en ddl fil i .net ( delphi 2005 ), men det går ikke så godt ...

Jeg kan godt kalde funktionen, men jeg får et forkert resultat

Her er min DLL

library BMUpdateDLLClient;


uses
  SysUtils,
  Classes,
  System.Reflection,
  System.Runtime.InteropServices;

[assembly: AssemblyTitle('')]
[assembly: AssemblyDescription('')]
[assembly: AssemblyConfiguration('')]
[assembly: AssemblyCompany('')]
[assembly: AssemblyProduct('')]
[assembly: AssemblyCopyright('')]
[assembly: AssemblyTrademark('')]
[assembly: AssemblyCulture('')]


[assembly: AssemblyVersion('1.0.*')]

[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile('')]
[assembly: AssemblyKeyName('')]


[assembly: ComVisible(False)]
//[assembly: Guid('')]
//[assembly: TypeLibVersion(1, 0)]


Function HelloDLLWorld: String;
begin
  Result := 'Hello DLL World' ;
end ;

{$UnSafeCode ON}
Exports
  HelloDLLWorld ;

begin

end.

... Og jeg kalder den fra denne unit ( Forkortet )


  Function GetDLLTest :String ; external 'BMUpdateDLLClient.dll' name 'HelloDLLWorld' ;


procedure TWinForm2.Button2_Click(sender: System.Object; e: System.EventArgs);
begin
  ShowMessage ( GetDLLTest ) ;
end;
Avatar billede kammeyer Nybegynder
22. december 2004 - 12:12 #1
I version 7 står der at du skal benytte ShareMEM i både dll og kalende exe program hvis du vil benytte STRINGS - hvis du vil undgå det skal du benytte PChar. Ved ikke om det også gælder Delphi 2005.

Jeg har ikke prøvet DLL'er før dit spørgsmål kom - og med pchar gik det godt for mig i D7.
Avatar billede cms Nybegynder
24. december 2004 - 14:31 #2
Jeg kan se at begge dine projekter er Delphi.net-projekter (altså ikke DelphiWin32).
Men den syntaks du benytter til at binde din funktion til dll'en er win32.

.NET bruger ikke dll'er på den måde, du er vant til. Et eksempel:

Projekt A er dit dll-projekt.
Projekt B er det projekt som kalder dll'en.
Læg Projekt A og B i samme projectgroup. Tilføj Project A til Project B's references (findes øverst ovre til højre i project view).

I Projekt A lav en klasse med en static method, fx:

type
  DllTest = class(System.Object)
  public
    class function HelloWorld: System.String;
  end;

class function DllTest.HelloWorld: System.String;
begin
  Result := "Hejsa med digsa...";
end;

Du kan nu kalde funktionen direkte fra Projekt B (husk at compile proj A):

procedure ...;
begin
  ShowMessage(DllTest.HelloDLLWorld);
  //Evt. skriv:
  ShowMessage(BMUpdateDLLClient.DllTest.HelloDLLWorld); //Hvis den laver et namespace til din dll.
end;

helt uden at lave noget volapyk a la:

  Function GetDLLTest :String ; external 'BMUpdateDLLClient.dll' name 'HelloDLLWorld' ;
Avatar billede cms Nybegynder
24. december 2004 - 14:32 #3
Det er noget helt andet, hvis du vil kalde en .NET-dll fra en Win32-dll...
Avatar billede screwdriver Nybegynder
27. december 2004 - 10:11 #4
Tak for dit svar CMS

Jeg skal kalde .net dll'en fra et alm. Win32 exe fil fra Delphi 7. Grunden er at jeg vil anvende nogle af fordelene ved .net fra et "Gammelt" D7 project, og jeg kan ikke umiddelbart hente projectet ind i D2005, da der skal installeres en masse extra komponenter for at få det til at virke

Så hvil du kan komme med et eksempel på en Win32 exe, der kalder en .net dll, vil jeg ære meget taknemlig :-)
Avatar billede screwdriver Nybegynder
24. august 2010 - 08:31 #5
Der kommer vist ikke flere svar (Nu er der jo gået knap 6 år)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester