Newsgroup: it.comp.lang.delphi
Titolo: Catastrophic failure in oggetto COM...

Salve Raga,
Ecco il codice:
unit uMailSend;
interface
uses
  ComObj, ActiveX, MailLib_TLB, StdVcl, MailSendDMCode, SysUtils, Classes;
type
  TMailSend = class(TAutoObject, IMailSend)
  private
    FMailDM : TMailSendModule;
    FSL : TStringList;
  protected
    function Get_FromAddress: WideString; safecall;
    function Get_MessageBody: WideString; safecall;
    function Get_SplitRecipients: Integer; safecall;
    function Get_ToAddress: WideString; safecall;
    procedure Set_FromAddress(const Value: WideString); safecall;
    procedure Set_MessageBody(const Value: WideString); safecall;
    procedure Set_SplitRecipients(Value: Integer); safecall;
    procedure Set_ToAddress(const Value: WideString); safecall;
    procedure AddAttachment(const FName: WideString); safecall;
    procedure Send(const ServerName: WideString; Port: Integer; const
UserName,
      Password: WideString); safecall;
    { Protected declarations }
  public
    constructor Create;
    destructor Destroy;override;
  end;
implementation
uses ComServ;
function TMailSend.Get_FromAddress: WideString;
begin
  Result := FMailDM.FromAddr;
end;
function TMailSend.Get_MessageBody: WideString;
begin
  Result := FMailDM.Mesg;
end;
function TMailSend.Get_SplitRecipients: Integer;
begin
  Result := Integer( FMailDM.SplitRecpts );
end;
function TMailSend.Get_ToAddress: WideString;
begin
  Result := FMailDM.ToAddr;
end;
procedure TMailSend.Set_FromAddress(const Value: WideString);
begin
  FMailDM.FromAddr := Value;
end;
procedure TMailSend.Set_MessageBody(const Value: WideString);
begin
  FMailDM.Mesg := Value;
end;
procedure TMailSend.Set_SplitRecipients(Value: Integer);
begin
  FMailDM.SplitRecpts := Boolean( Value );
end;
procedure TMailSend.Set_ToAddress(const Value: WideString);
begin
  FMailDM.ToAddr := Value;
end;
procedure TMailSend.AddAttachment(const FName: WideString);
begin
  FSL.Add( FName );
end;
procedure TMailSend.Send(const ServerName: WideString; Port: Integer;
  const UserName, Password: WideString);
begin
  FMailDM.ServerName := ServerName;
  FMailDM.Port := Port;
  FMailDM.UserName := UserName;
  FMailDM.Password := Password;
  FMailDM.SendMail;
end;
constructor TMailSend.Create;
begin
  inherited Create;
  FMailDM := TMailSendModule.Create( Nil );
  FSL := TStringList.Create;
end;
destructor TMailSend.Destroy;
begin
  FMailDM.Free;
  FSL.Free;
  inherited;
end;
initialization
  TAutoObjectFactory.Create(ComServer, TMailSend, Class_MailSend,
    ciMultiInstance, tmFree);
end.
Non ho idea di dove sia il problema, spero non nel DM, anche se in effetti
mi pare l'unica cosa possibile...
Grazie in anticipo,
Andrea

per iniziare, io cambierei il codice della destroy:
destructor TMailSend.Destroy;
begin
  FSL.Free;
  FMailDM.Free;
  inherited;
end;
Poi, quando si scatena il failure? Creazione? distruzione? uso?...?
A
--
Per rispondere non usare il reply ma scrivere al seguente indirizzo:
zzato(at)supereva;it
Please, don'r reply this message.
Use this address:
zzato(at)supereva;it

The DeerBear wrote:
<snip>
Tutto risolto!
Andrea

 Tutto risolto!
Se anzichč postare un messaggio per dire "tutto risolto" scrivessi anche la
soluzione contribuiresti alla crescita del gruppo!
--
- Carlo -
"Imparare senza riflettere o riflettere senza imparare non vi porta alla
buona comprensione" Confucio

 anche la soluzione contribuiresti alla crescita del gruppo!
Si, scusa, andavo di fretta! ^_^
Beh, semplicemente non si inizializzava il DM( come pensavo ) per via del
fatto che la
Create nelle classi TComObject &C è /statica/ quindi il tuo "codice
personalizzato" deve
andare *prima* di richiamare "inherited". Per risolvere ho trasferito le mie
inizializzazioni nel
metodo Initialized( che è virtuale, quindi sovraccaricabile ^_^ ).
Per finire c'erano delle imperfezioni nella gestione della connessione e
dell'invio, tutto
risolto ed ora funziona! ^_^
Andrea