Autor Beitrag
LuMa86
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: So 22.12.13 15:48 
Moinsen,
habe ein kleines Problem mit meiner SimpleSMTPMail-Unit. Diese hat immer super funktioniert, aber da ich sie mitlerweile immer öfter nutze, möchte ich sie in eine DLL auslagern.

Die DLL sieht so aus:

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:
library SimpleSMTPMail;

uses
  {...}

function SendSimpleSMTPMail(AHost, AUsername, APassword, ASender,
  ASubject: String; APort: Integer; ARecipients, ABody: TStrings; UseSASL: Bool)
  : Integer; stdcall;
var
  {...}
begin
  try
    {...}

    with MailMessage do
      begin
        From.Address := MailSender;
        for i := 0 to MailRecipients.Count - 1 do
          Recipients.Add.Address := MailRecipients.Strings[i];
        Subject := MailSubject;
        Body := MailBody; // Hier kommt der Fehler!
      end;

    {...}
  except
    {...}
    raise Exception.Create('You shouldn''t see this!');
  end;
end;

exports
  SendSimpleSMTPMail;

end.


Der Aufruf in meinem Test-Programm sieht so aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
function SendSimpleSMTPMail(AHost, AUsername, APassword, ASender,
  ASubject: String; APort: Integer; ARecipients, ABody: TStrings; UseSASL: Bool)
  : Integer; stdcallexternal 'SimpleSMTPMail.dll';

ShowMessage(IntToStr(SendSimpleSMTPMail('smtp.gmail.com',
    'myname@googlemail.com''mypassword',
    'myname@googlemail.com''Mail-Test'587,
    MemoRecipients.Lines, MemoBody.Lines, True))); // ShowMessage zeigt mir nur den Error-Code, bzw. '-1' für Erfolg!


In meiner Unit hat das immer einwandfrei funktioniert, warum klappt es nun in der DLL nicht?

Ich bin machtlos, bitte helft mir auf die Sprünge :(

Lg,
LuMa
Quitzlinga
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2

Win XP
Delphi 2007 Prof. Codegear Win32
BeitragVerfasst: So 22.12.13 18:46 
Hi,

folgender Link sollte Dir weiterhelfen : Stringlist an DLL übergeben

MfG

Quitzlinga

Für diesen Beitrag haben gedankt: LuMa86
LuMa86 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Mo 23.12.13 13:57 
Hmmm okay, das sieht ja schonmal ganz schlüssig aus, aber warum geht es denn mit den Empfängern, also "ARecipients", die Variable ist ja auch vom Typ "TStrings" ?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 23.12.13 14:18 
Da beide Teile mit der selben Version von Delphi kompiliert wurden, funktioniert es auch meistens. Man kann sich nur nicht darauf verlassen und manches geht einfach gar nicht.

Solange du nur Interfaces oder einfache Typen nimmst, gibt es kein Problem. Statt String kannst du z.B. PWideChar, PAnsiChar oder WideString nutzen. Die Empfänger und den Body würde ich einfach ebenfalls als solchen Text angeben.

Für diesen Beitrag haben gedankt: LuMa86
LuMa86 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Mo 23.12.13 20:00 
Gut, dann werde ich das wohl so lösen :)