Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Dll benutzen in einer Consolen Anwendungen (https://www.delphipraxis.net/60017-dll-benutzen-einer-consolen-anwendungen.html)

Dr.No 1. Jan 2006 20:45


Dll benutzen in einer Consolen Anwendungen
 
Also ich hab ne Consolen Anwendung geschrieben, und wollte dann mit dem dll-experte ne dll erstellen, und da ne procedure rein schreiben, aber der hat da so nen fehler dann immer gebracht:
Die Anwendung kann nicht initalisiert werden (0xc000007b). Kicken sie...

Mein code in der Haiptanwendung ist dann so:
program Haupt;
uses Sysutils;

procedure Hmenu; external 'was.dll';

begin
Hmenu;
end;

und in der dll:

library was;

procedure Hmenu;
var s:string;
begin
writeln('Hallo');
readln(s);
end;

begin
end.



ABer wenn ich jetzt das ganze als funktion schreibe in der dll statt procedure tuts.
Woran liegt das, und wie mach ich das mit den proceduren?
ALso ich freu mich schon auf schöne antworten!

ste_ett 1. Jan 2006 21:15

Re: Dll benutzen in einer Consolen Anwendungen
 
Hier gibt es [delphi]-Tags, die man für Code benutzen kann! :)

[pre]
procedure Hmenu; stdcall; external 'was.dll';
[/pre]

---
edit

aus delphi mach pre, komisch :p

JocalAreaNetwork 1. Jan 2006 21:43

Re: Dll benutzen in einer Consolen Anwendungen
 
Die muss dann allerdings auch noch in der DLL als stdcal; deklariert werden.

Sascha_OW 7. Feb 2006 08:56

Re: Dll benutzen in einer Consolen Anwendungen
 
Hallo,

ich habe das gleiche Problem. Will ne FTP DLL Schreiben vileicht kann mir ja jemand helfen

IN der DLL:
Delphi-Quellcode:
library Project2;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  SysUtils,
  Classes,
  IdFTP;

{$R *.res}

function FTPConnect (Server: String; User: String; PWDFTP: String): boolean; stdcall;
var con : TIDFTP;
begin
   con := TIDFTP.Create;
   con.Host := Server;
   con.Username := User;
   con.Password := PWDFTP;
   con.Connect;
   IF con.Connected then result := true else result := false;
end;


end.


und dann im Program selbst, die Unit wo die DLL eingebunden wird:

Delphi-Quellcode:
unit Unit2;

interface
   function FTPConnect (Server: String; User: String; PWDFTP: String): boolean; stdcall;
implementation
   function FTPConnect (Server: String; User: String; PWDFTP: String): boolean; stdcall;
external 'project2.dll';
end.
und dann die Unit wo ich die Function aufrufe:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdExplicitTLSClientServerBase, IdFTP, StdCtrls, ExtCtrls, unit2;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  connec: boolean;
implementation


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  connec := FtpConnect ('**************', '************', '***********');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   connec := false;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  IF Connec then Label1.Color := clgreen else Label1.Color := CLRed;
end;

end.
Vielen Dnake vieleicht kann mir ein helfen
















Edit by Sascha:


hat sich erledigt, habe es selbst gefunden, es war das
Delphi-Quellcode:
exports
was fehlte und eimn
Delphi-Quellcode:
begin

Luckie 7. Feb 2006 09:00

Re: Dll benutzen in einer Consolen Anwendungen
 
Als aller erstes: Der dicke, fett, nicht zu übersehende Kommentar wird nicht umsonst vom DLL-Erperten oben in der Unit eingefügt. Einfach mal durchlesen. Wenn es dann immer noch Probleme gibt, kannst du noch mal genauer nachfragen. Am besten in einem neuen Thread mit deinem spezifischen Problem.

Zweitens: Wo sind die Funktionan aus der DLL in der aufrufenden Unit deklariert?

Drittens: Wie lauten die Fehlermeldungen? :?

freak4fun 7. Feb 2006 09:05

Re: Dll benutzen in einer Consolen Anwendungen
 
Schau mal hier. Das könnte dir weiterhelfen. ;)

MfG
freak

Sascha_OW 7. Feb 2006 11:18

Re: Dll benutzen in einer Consolen Anwendungen
 
läuft ja jetzt alles, jetzt habe ich meine kleine FDP dll


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz