Entwickler-Ecke

Internet / Netzwerk - Mail-Unit --> Mail-DLL haut nicht hin


LuMa86 - So 22.12.13 15:48
Titel: Mail-Unit --> Mail-DLL haut nicht hin
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:


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:


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 - So 22.12.13 18:46

Hi,

folgender Link sollte Dir weiterhelfen : Stringlist an DLL übergeben [http://www.delphipraxis.net/134411-stringlist-dll-uebergeben.html]

MfG

Quitzlinga


LuMa86 - 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 - 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.


LuMa86 - Mo 23.12.13 20:00

Gut, dann werde ich das wohl so lösen :)