The error message is...

"The application called an interface that was marshalled for a different
thread"

I have also tried to use your method of creating and using objects; frankly
ive found out using the with clause and using a variable to create and
access object properties and methods are the same ie.

/////////////

with TSMSSender.Create(nil) do
begin
  ConnectTo(...);
  SendMessage(...);
  Free;
end;
///////////
and
///////////////

var
  SMSSender : TSMSSender;
begin
  SMSSender:=TSMSSender.Create(nil);
  SMSSender.ConnectTo(...);
  SMSSender.SendMessage(...);
  SMSSender.Free;
end;

/////////

are the same.

I know the problem lies somewhere with activex/com objects and threads; i
just cant put my fingure on it...

Thanks anyway,

Chris.
----- Original Message -----
From: "Vahan Yoghoudjian" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Tuesday, July 05, 2005 4:32 PM
Subject: RE: [delphi-en] Borland ADO and Threads


>     what is the error message?
>
>     I have never used TComponentType.Create(nil) in a with clause... I
don't
> know but this might be it, can you try to avoid it? or maybe it's the nil
> parameter that you are passing to the constructor... can you try
application
> for example?
>
>     The error message would help us more to find out the source of your
> problem
>
> Cheers
> Vahan
>
> -----Original Message-----
> From: [email protected] [mailto:[EMAIL PROTECTED]
Behalf
> Of Chris @ IT
> Sent: Tuesday, July 05, 2005 2:23 PM
> To: [email protected]
> Subject: [delphi-en] Borland ADO and Threads
>
>
> Hi all,
>
> Im having a slight problem here; probably missing something small.
> I have an application that recieves sms messages from an smpp server then
> spins of a thread that goes ahead to insert into a database. Reason for
this
> is that i need to free my application as soon as possible to receive the
> next smpp message coming in.
>
> This works all well and good - i ensured that i call coinitialize and
> couninitialize for each thread (so that i can use com objects
(TADOCommand))
>
> The problem comes when i drop a timer and on each timer tick i cannot
create
> any kind of com/activex object (ado etc etc) if i try i get the following
> error
>
> The application called an interface that was marshalled for a different
> thread
>
> below are snips of the code
>
> - for the thread execute method itself
>
> procedure Tinsert.Execute;
> begin
>   { Place thread code here }
>   Coinitialize(nil);
>
>   with TADOCOmmand.Create(nil) do
>   begin
>     ConnectionString:='Provider=SQLOLEDB.1;Password=kiokor$7;Persist
> Security Info=True;User ID=sa;Initial Catalog=smsgate';
>
>     CommandText:='insert into tblincoming
>
(Message_Destination,Message_Source,Message_Text,Message_Option,Message_SMSC
> TimeStamp,Message_Validity) values ('+
>       QuotedStr(f_bstrDestination)+','+
>       QuotedStr(f_bstrOriginator)+','+
>       QuotedStr(f_bstrMessage)+','+
>       IntToStr(f_lOption)+','+
>       QuotedStr(FormatDateTime('dd mmm yyyy
HH:nn:ss',f_SMSCTimeStamp))+','+
>       QuotedStr(FormatDateTime('dd mmm yyyy HH:nn:ss',f_Validity))+')';
>
>     Execute;
>     Free;
>   end;
>
>   CoUninitialize;
> end;
>
> - and for the timer method - smpp send
>
> procedure TsSMPP.TimerTimer(Sender: TObject);
> begin
>
>   with TADOQUery.Create(nil) do
>   begin
>     ConnectionString:='Provider=SQLOLEDB.1;Password=kiokor$7;Persist
> Security Info=True;User ID=sa;Initial Catalog=smsgate';
>     SQL.TexT:='select * from tbloutgoing where Message_MTDelivered=0';
>
>     Open;
>     while not EOF do
>     begin
>       SMPP.SMSCSubmitMessage(
>         FieldByName('Message_Destination').AsString,
>         FieldByName('Message_Source').AsString,
>         FieldByName('Message_Option').AsInteger,
>         FieldByName('Message_SourceTON').AsInteger,
>         FieldByName('Message_SourceNPI').AsInteger,
>         FieldByName('Message_DestTON').AsInteger,
>         FieldByName('Message_DestNPI').AsInteger,
>         FieldByName('Message_Text').AsString,
>         Now,
>         FieldByName('Message_Validity').AsInteger);
>
>       Edit;
>       FieldByName('Message_MTDelivered').AsBoolean:=True;
>       Post;
>       Next;
>     end;
>     Close;
>   end;
>
> end;
>
> the error occurs on the timer send as soon as the ado querry is created
>
> any help would be appreciated.
>
> regards
>
> Chris.
>
>
>
> -----------------------------------------------------
> Home page: http://groups.yahoo.com/group/delphi-en/
> To unsubscribe: [EMAIL PROTECTED]
>
>
>
> --------------------------------------------------------------------------
--
> ----
> YAHOO! GROUPS LINKS
>
>   a..  Visit your group "delphi-en" on the web.
>
>   b..  To unsubscribe from this group, send an email to:
>    [EMAIL PROTECTED]
>
>   c..  Your use of Yahoo! Groups is subject to the Yahoo! Terms of
Service.
>
>
> --------------------------------------------------------------------------
--
> ----
>
>
>
>
> [Non-text portions of this message have been removed]
>
>
>
> -----------------------------------------------------
> Home page: http://groups.yahoo.com/group/delphi-en/
> To unsubscribe: [EMAIL PROTECTED]
> Yahoo! Groups Links
>
>
>
>
>
>
>



-----------------------------------------------------
Home page: http://groups.yahoo.com/group/delphi-en/
To unsubscribe: [EMAIL PROTECTED] 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/delphi-en/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 


Reply via email to