Autor Beitrag
Darnus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Mo 18.09.06 23:44 
hallo ich wolte da ich mich nicht so gut mit DLL auskenne fragen wie man eine DLL aufruft und sie richtig erstellt:

Beispiel:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
library Project1;


uses
  SysUtils,
  inifiles,
  Classes;

{$R *.res}
procedure wini;stdcall;
var ini:Tinifile;
begin
 ini:=Tinifile.Create(ExtractFilePath(paramstr(0))+'mapsCP2.cfg');
 ini.WriteString('settings','w00','');
 ini.WriteString('settings','w01','');
 ini.WriteString('settings','w02','');
 ini.WriteString('settings','w03','');
 ini.WriteString('settings','w04','');
 ini.WriteString('settings','w05','');
 ini.WriteString('settings','w06','');
 ini.WriteString('settings','w07','');
 ini.WriteString('settings','w08','');
 ini.WriteString('settings','w09','');
  ini.WriteString('settings','w10','');
   ini.WriteString('settings','w11','');
    ini.WriteString('settings','w12','');
     ini.WriteString('settings','w13','');
      ini.WriteString('settings','w14','');
       ini.WriteString('settings','w15','');
        ini.WriteString('settings','w16','');
         ini.WriteString('settings','w7','');
          ini.WriteString('settings','w8','');
 ini.free;
    end;
end.


Die dll sol eine INI datei erstellen / schreiben, jedoch weiss ich nicht ob das so 100% richtig ist und vorallem weiss ich nicht wie ich sie aufrufen sol habe schon tuts gesehen aber ich weiss nicht wie ich es hier umsetzen kann. Danke für die hilfe :-)


Moderiert von user profile iconChristian S.: Topic aus Sonstiges (Delphi) verschoben am Di 19.09.2006 um 01:19
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Di 19.09.06 07:28 
Hallo Darnus,

warum testest du es nicht selber? :)
Es fehlt noch der Export-Teil:
ausblenden Delphi-Quelltext
1:
2:
  exports
    Wini;
So kannst du es dann aus deinem Hauptprogramm aufrufen:
ausblenden Delphi-Quelltext
1:
  procedure Mini; stdcall; external 'DLLNAME.dll';					

Ich bezweifle allerdings, dass die DLL wirklich Sinn macht, da diese schätzungsweise 50kb groß sein wird für etwas, was sich leicht auch im Hauptprogramm erledigen lässt.
Wichtig: Wenn die DLL nicht existiert, kommt eine Fehlermeldung und das Programm bricht während des Ladevorgangs ab. Wie man DLLs dynamisch lädt und vieles weitere interessante zu DLLs, findes du bei Suche bei Google ASSARBAD DELPHI.

Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.


Zuletzt bearbeitet von wulfskin am Di 19.09.06 11:24, insgesamt 1-mal bearbeitet
Darnus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Di 19.09.06 10:33 
Ich weiss aber es hat andere gründe wozu ich das wissen möchte :P
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Di 19.09.06 13:01 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
library Project1;


uses
  SysUtils,
  inifiles,
  Classes;

{$R *.res}
procedure wini;stdcall;
var ini:Tinifile; i:integer;
begin
 ini:=Tinifile.Create(ExtractFilePath(paramstr(0))+'mapsCP2.cfg');
 with ini do
 begin
       for i := 1 to 16 do
       begin
          if (i < 10) then
            writestring('settings','w0'+inttostr(i),'')
          else
           writestring('settings','w'+inttostr(i),'');
       end;
 WriteString('settings','w7','');
 WriteString('settings','w8','');
 Free;
 end;
end;
end.

Das ginge imho so auch kürzer.
@topic: Hast du das nun schon hin bekommen oder hast du noch Fragen?

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 19.09.06 13:35 
Hat schon mal jemand darüber nachgedacht, welchen Wert ParamStr(0) in einer DLL zurückliefert? :?
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Di 19.09.06 16:39 
@Luckie: Den ParamString der Exe?
Dann wäre vielleicht GetModule[...kA was...] passend.

@Topic: Wenn die DLL und die Exe im gleichen Verzeichnis sind, sollte es egal sein.

Und nochwas, was Luckie bestimmt freut zu hören: Einstellungen gehören nicht ins Programmverzeichnis, sondern ins Anwendungsdaten-Verzeichnis!
(Ja, ich hab mir deinen Artikel durchgelesen. Wo du Recht hast, hast du Recht. Werd mal versuchen mich dran zu halten. Der Tipp mit den bedingt compilierten Pfaden ist übrigens gut. So, genug OT :D )

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 19.09.06 17:48 
user profile iconMartok hat folgendes geschrieben:
@Luckie: Den ParamString der Exe?

Ich weiß es nicht. Aber hier scheint jeder erstmal davon ausgegangen zu sein, dass es den Pfad der Exe liefert. Aber warum? Ich glaube es nämlich nicht. Denn dann müsste ParamStr(1) die Aufrufparameter der Exe liefern. Aber woher soll die DLL wissen, mit welchen Paramteren die Exe aufgerufen wurde? Es würde mich nicht wundern, wenn ParamStr(0) einen Leerstring zurückliefert.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Di 19.09.06 17:58 
Da hast du meine Neugier geweckt. Und siehe da: ich hatte Recht (gut geraten...)

Irgendwoher weiß die DLL den ParamString.

Die DLL:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
library TestDLL;

uses
  SysUtils;

procedure GetParamStr(Buffer:PChar; var Length:Integer);
var s:string;
    i:integer;
begin
  for i:= 0 to ParamCount do
    s:= s+ParamStr(i)+' ';
  if Buffer=nil then
    Length:= System.Length(s)
  else
    StrPCopy(Buffer,S);
end;

exports
  GetParamStr;
end.


Das Programm:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure GetParamStr(Buffer:PChar; var Length:Integer); external 'TestDLL.DLL';

procedure TForm1.Button1Click(Sender: TObject);
var l:integer;
    buf:String;
begin
  GetParamStr(nil,l);
  if l>0 then begin
    SetLength(buf,l+1);
    GetParamStr(@buf[1],l);
    ShowMessage(buf);
  end;
end;


Und dann mit Start->Parameter ein paar Parameter gesetzt und getestet. Interessant.

Martok

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 19.09.06 19:10 
user profile iconMartok hat folgendes geschrieben:
Und dann mit Start->Parameter ein paar Parameter gesetzt und getestet. Interessant.

In der Tat, interessant. :? Man müsste in der System.pas mal gucken, was ParamStr(0) intern macht, da dürfte sich eine Erklärung finden lassen.
Darnus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: So 24.09.06 23:25 
THx :)