Take a look at items 3 & 4 here: http://www.techvanguards.com/com/tutorials/tips.asp
David -----Original Message----- From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Chris @ IT Sent: Tuesday, July 05, 2005 8:58 AM To: [email protected] Subject: Re: [delphi-en] Borland ADO and Threads 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 ----------------------------------------------------- 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/

