Instanciation d objets OLE ca ne marche que dans l unite principale ?

Instanciation d objets OLE ca ne marche que dans l unite principale ? - Delphi/Pascal - Programmation

Marsh Posté le 07-09-2003 à 10:54:27    

Bonjour à tous,
 
Comme me l ont recommande moulte fois antp et zion je suis en train de reorganiser mon programme pour que il y est le moins de traitements possible dans l unité de ma form. Je réecris donc ces traitement (ici génération de fichiers) dans une autre unité que j appele de la manière suivante:

Code :
  1. var s : string; //return path to the file
  2. begin
  3.   s := MonObjet.CetteFonction
  4. end;


Lorsque j utilisais la serie d'instructions qui me donnait le fichier ces instructions possèdaient la ligne suivante:

Code :
  1. XMLFile1 := CreateOleObject('Microsoft.XMLDOM') as IXMLDomDocument;
  2.   //etc.


 
et ca marche impeccable. Or je refais cette serie d instructions dans une autre unité donc et la ca plante méchant à la ligne ci dessus. Avant que vous me le fassiez remarqué, oui j ai ajouté ComObj à mes uses.
 
Le projet compile mais lors de l erreur delphi pointe sur cette ligne (c est la premiere de la fonction). et le message d erreur est le suisvant:
"Access Violation at address 004066FB etc.."
 
bon c est quoi mon erreur ? car si je pouvais faire marcher ce truc je vais pouvoir economiser pas mal de lignes alors HELP!
 
Merci  
 
@++


Message édité par KrzAramis le 07-09-2003 à 10:55:18
Reply

Marsh Posté le 07-09-2003 à 10:54:27   

Reply

Marsh Posté le 07-09-2003 à 11:08:36    

il plante sur le create ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-09-2003 à 11:17:59    

Apparemment oui !
puisque c est la premier ligne ...
 
C est quoi docteur ?
 
@++

Reply

Marsh Posté le 07-09-2003 à 11:23:11    

aucune idée :/
c'est bien sur le create et pas sur l'appel de fonction de ton objet ?


Message édité par antp le 07-09-2003 à 11:23:32

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-09-2003 à 11:31:10    

ah bon?
ben ce que je fais c est que j ecris la fonction avec tous les parametres puis je copie / colle dans mon unit principale et j ajuste les parametres.
je fais passer qq Array of String mais il n y pas de taille definie ? j ai bien essayer de le coder dans la definition de la fonction mais il ne veut pas :/
 
 
@++

Reply

Marsh Posté le 07-09-2003 à 11:32:07    

:??: je pige pas ce que tu me dis là, c'est quoi le rapport avec ma question ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-09-2003 à 11:43:27    

ben je suis quasiment sur que c est pas sur l appel de la fonction car le nombre de parametres est correct. deplus j ai ecrit une autre procedure dans mon objet et ca marche bien.
Deplus quand je fais du pas a pas l erreur se declanche sur cette ligne.
J espere avoir ete plus clair. Sinon comment verifier que c est pas l appel qui foire ?
 
@+

Reply

Marsh Posté le 07-09-2003 à 11:48:01    

Si c'était un problème de param ça compilerait pas :o
Je parlais de, pas exemple, "mon objet" qui serait nil ou avec une valeur bidon (genre on a fait un free)
 
bah si en pas à pas tu arrives à rentrer dans la fonction ça devrait être bon... à moins que ce XMLFile1 soit un attribut de l'objet dans lequel tu es, et que justement cet objet pointe vers n'importe quoi...
si tu fais juste le CreateOle sans l'assigner, ça plante pareil ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-09-2003 à 11:55:45    

ben j ai vire le XMLFile1 et le "as ..." et ca marche. Enfin pour cette ligne! car forcement j ai besoin de XMLFile1 dans la suite de mon programme forcement comme c est pas assigné ca plante.
une fois que j ai fait CreateObject je peux le recuperer qq part pour pouvoir m en servir ??
 
@++

Reply

Marsh Posté le 07-09-2003 à 12:35:12    

donc ça veut dire que XMLFile1 n'est pas valide... c'est quoi ? un attribut d'un objet ? Ça veut dire que l'objet n'a pas été créé


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-09-2003 à 12:35:12   

Reply

Marsh Posté le 07-09-2003 à 13:41:58    

Non c est une variable declarer dans ma section public et qui est de type IXMLDOMDocument (uniquement possible si la librairie MSXML_TLB est presente dans les uses). Par rapport a l unite principale je n ai rien change si ce n est que c est dans une autre unit.
 
@++

Reply

Marsh Posté le 07-09-2003 à 14:03:27    

krzAramis a écrit :

Non c est une variable declarer dans ma section public  


 
donc un attribut d'un objet :whistle:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-09-2003 à 15:39:48    

soit c est un attribut d objet. Donc qu est ce je fais ?
je fais un "MonObjet.Create" que je demarre mon prog ?
 
@++

Reply

Marsh Posté le 07-09-2003 à 16:00:10    

Il faut bien un Create quelque part hein [:mlc] Ou alors tu dois faire des "class procedure" et "class function", mais dans ton cas ça ne changera rien vu que tu as besoin des attributs de l'objet.


Message édité par antp le 07-09-2003 à 16:00:45

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-09-2003 à 16:03:37    

Ben heu c est a dire que pour lemoment mon objet n avait pas d attributs et une seul procedure et jai pas de create ! et ca marche tres bien... si seulement j avais su... deplus maintenant il me demande de faire un constructeur... je sais pas comment on fait...
 
@++

Reply

Marsh Posté le 07-09-2003 à 16:15:29    

heu t'as pas spécialement besoin de constructeur... enfin, ça dépend, tu la déclares comment ta classe ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-09-2003 à 16:22:25    

Un extrait de code ca te va ?

Code :
  1. unit UMyObj;
  2. interface
  3. uses UMainfrm, MSXML_TLB,
  4.      //Delphi
  5.      Classes, OleCtrls, ComObj;
  6. type TMyObj = class(TObject)
  7.   public
  8.   {public declaration}
  9.   {public variables }
  10.   //Vaiable to generate XML on the fly
  11.   XMLFile1, XMLFile2          : IXMLDOMDocument;
  12.   root, child, child1, child2 : IXMLDomElement;
  13.   {public procedures and functions}
  14.   procedure UpDate            ( NameOfSource : string);
  15.   function  Produce           ( param1:  integer): string;
  16. end;//type


 
voila.
 
Avant l apparition de ma fonction la procedure etait appelée de la facon la plus classique MyObj.Update('toto');
et il n y avait pas d attribut ;)
 
@++

Reply

Marsh Posté le 07-09-2003 à 19:41:38    

faut bien un MyObj := TMyObj.Create; quelque part, non ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 08-09-2003 à 14:03:26    

ben quand je le fais ca plante mechant.
 
 
@++

Reply

Marsh Posté le 08-09-2003 à 14:31:18    

:heink: "ça plante" = ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 08-09-2003 à 15:10:16    

ca me fait un access violation
 :(

Reply

Marsh Posté le 08-09-2003 à 15:50:43    

Tu fais quoi exactement [:mlc]?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed