Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem beim einbinden von dll's (https://www.delphipraxis.net/33209-problem-beim-einbinden-von-dlls.html)

maximus Caesar 3. Nov 2004 08:34


Problem beim einbinden von dll's
 
Hallo!
Hab ein Problem mit dem Einbinden von dll's, will eine zum Ladezeitpunkt einbinden:

Laden(extra Unit):
Delphi-Quellcode:
unit dlls;

interface

procedure start;

implementation

procedure start;
external 'Weg.dll';

end.
aufruf der procedure start:

Delphi-Quellcode:
procedure TForm1.MausPosition(Sender:TObject);
begin
 a:=StrToInt(Edit2.Text);
 if a=1 then begin
  Form2.Edit5.Text:=IntToStr(Mouse.CursorPos.X);
  Form2.Edit6.Text:=IntToStr(Mouse.CursorPos.Y);
  Form1.Maus2(Form1);
  Form1.Image1.OnClick:=nil;
  Form1.Image1.OnMouseMove:=nil;
  Form1.setzen(Form2.Edit3.Text,Form2.Edit4.Text,Form2.Edit5.Text,Form2.Edit6.Text);
  dlls.start;                   //Hier wird die Prozedure aufgerufen!!!!!
 end;
 if a=0 then begin
  Form2.Edit3.Text:=IntToStr(Mouse.CursorPos.X);
  Form2.Edit4.Text:=IntToStr(Mouse.CursorPos.Y);
  Edit2.Text:='1';
 end;
end;
Folgender Fehler tritt auf:
acess violation at 0x7c947a50: write of adress 0x00030d28

Wenn ich jetzt das "dlls.start" entferne, funktioniert alles!

Die Prozedure start gibt es in der dll und wird auch exportiert!

jim_raynor 3. Nov 2004 08:48

Re: Problem beim einbinden von dll's
 
Denke an:
- Aufrufkonventionen und
- Paramater/Rückgabewerte

diese müssen identisch sein. Dazu wäre intressant in welcher Sprache die DLL entwickelt wurde.

maximus Caesar 3. Nov 2004 08:54

Re: Problem beim einbinden von dll's
 
Objekt Pascal, selber geschrieben, mit Delphi 6 Personal, mit dem ich auch das Programm schreibe!

Meinst du, dass ich stdcall verwenden sollte?

maximus Caesar 3. Nov 2004 09:01

Re: Problem beim einbinden von dll's
 
Ups... :oops:
Fehler gefunden!
Die dll war im falschen Ordner!

Luckie 3. Nov 2004 11:50

Re: Problem beim einbinden von dll's
 
Ähm, das
Delphi-Quellcode:
dlls.start;
ruft die Prozedur aus der Unit aus, aber bestimmt nicht aus der DLL.

maximus Caesar 3. Nov 2004 12:54

Re: Problem beim einbinden von dll's
 
Laut Tutorial hab ich in der Unit dlls der Prozedure "start" die prozedure "start" der dll "Weg" zugewiesen, und kann dann diese so aufrufen!

Wenn das nicht stimmt, wie kann ich dann die Prozedure "start" der "Weg.dll" aufrufen?

Luckie 3. Nov 2004 12:57

Re: Problem beim einbinden von dll's
 
Zitat:

Zitat von maximus Caesar
Laut Tutorial hab ich in der Unit dlls der Prozedure "start" die prozedure "start" der dll "Weg" zugewiesen,

Hä??? :gruebel:

Zitat:

Wenn das nicht stimmt, wie kann ich dann die Prozedure "start" der "Weg.dll" aufrufen?
Dynamisch ginge es so: (Am Beispiel für Shellexecute, für das man normalerweise die Unit ShellAPI.pas einbinden müsste.)

Delphi-Quellcode:
type
  TShellexecute = function(hWnd: HWND; Operation, FileName, Parameters,
    Directory: PChar; ShowCmd: Integer): HINST; stdcall;

procedure TForm1.Button1Click(Sender: TObject);
var
  hLib: cardinal;
  MyShellExecute: TShellexecute;
begin
  hLib := LoadLibrary('shell32.dll');
  if hLib <> 0 then
  begin
    @MyShellexecute := GetProcAddress(hLib, 'ShellExecuteA');
    if not Assigned(MyShellexecute) then
    begin
      RaiseLastOSError;
      exit;
    end;
  end
  else
  begin
    RaiseLastOSError;
    exit;
  end;
  MyShellexecute(Form1.Handle, 'open', 'Notepad.exe', nil, nil, SW_NORMAL);
end;
Und nach welchem Tutorial? In dem von Assarbad sthet das so bestimmt nicht drinne: http://www.luckie-online.de/Delphi/Importe/Assarbad/

maximus Caesar 3. Nov 2004 15:02

Re: Problem beim einbinden von dll's
 
Zitat:

Zitat von Luckie
Und nach welchem Tutorial?

Hab ich von www.tutorials.delphi-source.de


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:28 Uhr.

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