|
Type BSTR en WinDev |
|
Stagiaire WDF 
Inscrit: 14/02/2008 22:00
Post(s): 7
|
Bonjour à tous, j'ai un problème avec un argument lors d'un appel d'une méthode Ole automation Lors de l'exécution du code suivant:
FicATrt est chaine
FicATrt="C:\Temp\Test.tif"
ImageDoc = Engine>>PrepareAndOpenImage(FicATrt)
J'obtiens l'erreur WinDev suivante:
Vous avez appelé la méthode Automation 'PrepareAndOpenImage'.
En tentant d'invoquer la méthode <PrepareAndOpenImage> ou de lire la propriété <PrepareAndOpenImage>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 80020005, Type incorrect pour le paramètre 1'
En tentant d'invoquer la méthode <PrepareAndOpenImage>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 80020005, Type incorrect pour le paramètre 1'
En tentant de lire la propriété <PrepareAndOpenImage>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 80020003, Le membre demandé n'existe pas'
En tentant d'écrire la propriété <PrepareAndOpenImage>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 80020003, Le membre demandé n'existe pas'
Lorsque je regarde la fonction avec l'aide du OLE-COM Object Viewer de Visual Studio 2008 j'obtiens ceci:
IImageDocument* PrepareAndOpenImage(
[in] BSTR FileName,
[in, optional, defaultvalue(0)]
IPrepareImageMode* PrepareMode,
[in, optional, defaultvalue(0)] IImagePasswordCallback* passwordCallback,
[in, out, optional, defaultvalue(0)] IDocumentInfo** pdfInfo);
Je vois que le 1er argument (le nom du fichier à traiter) est de type BSTR. Comment fait-on en WinDev pour passer un argument de ce type? À noter que le même test en VB fonctionne avec ce code:
ImageDoc = Engine.PrepareAndOpenImage("C:\Temp\Test.tif")
Merci à l'avance à tous ceux qui pourront m'aider... PS: Super site en passant, j'viens de le découvrir voilà seulement quelques jours et c'est vraiment complet et utile. Bravo
Contribution le : 15/02/2008 17:11
|
|
|
Re: Type BSTR en WinDev |
|
Animateur WDF 
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour & désolé du retard Avec les API il est préférable de passer les types chaines en Chaines ASCII exemple
FicATrt est chaine asciiz sur 256
FicATrt="C:\Temp\Test.tif"
ImageDoc = Engine>>PrepareAndOpenImage(FicATrt)
les chaines passées à des API doivent dans la plupart des cas se terminer par caract(0) Les chaines Ascii sont donc initialisée avec des caract(0) Mais on pourrait aussi écrire:
FicATrt est chaine
FicATrt="C:\Temp\Test.tif" + Caract(0)
ImageDoc = Engine>>PrepareAndOpenImage(FicATrt)
Devrait fonctionner aussi.
Contribution le : 18/02/2008 10:42
|
|
|
Re: Type BSTR en WinDev |
|
Stagiaire WDF 
Inscrit: 14/02/2008 22:00
Post(s): 7
|
J'ai essayé comme vous me l'avez conseillé avec une chaine asciiz ou avec Caract(0) à la fin et j'ai toujours la même Erreur. En fouillant un peu plus j'me suis rendu compte qu'ils parlent toujours de texte UNICODE. J'ai donc essayé le code suivant:
FicATrt est chaîne UNICODE
FicATrt=AnsiVersUnicode("C:\Temp\test.tif")
ImageDoc = Engine>>PrepareAndOpenImage(FicATrt)
J'obtiens maintenant l'erreur suivante:
Erreur à la ligne 61 du traitement Clic sur Bouton1.
Vous avez appelé la méthode Automation 'PrepareAndOpenImage'.
Le paramètre 1 n'est pas convertible en paramètre automation.
Types incompatibles durant une affectation.
Informations techniques
Projet : TestOCR
Dump de l'erreur du module <WD110VM.DLL> <11.00Qa>.
- Appel WL :
Traitement de <Fenêtre1.Bouton1>, ligne <61>, thread <0>
- Niveau : erreur fatale (EL_FATAL)
- Code erreur : 1053
- Code erreur WD55 : 0
- Pas de code d'erreur système
- Pas de message d'erreur système
- Que s'est-il passé ?
Vous avez appelé la méthode Automation 'PrepareAndOpenImage'.
Le paramètre 1 n'est pas convertible en paramètre automation.
Types incompatibles durant une affectation.
- Infos de debug :
COperationAutomation::__pPrepareParametreAppelAutomation(0)
- Infos attachées :
EIT_DATEHEURE : 19/02/2008 09:02:51
EIT_PILEWL :
Clic sur Bouton1 (Fenêtre1.Bouton1), ligne 61
- Identifiant dans le .err : 1053
Assistance
Est-il possible de passer une chaine au format Unicode comme paramètre autrement? Merci à l'avance...
Contribution le : 19/02/2008 15:08
|
|
|
Re: Type BSTR en WinDev |
|
Stagiaire WDF 
Inscrit: 14/02/2008 22:00
Post(s): 7
|
Un autre test que j'ai fait, j'me suis dis que puisque le code suivant fonctionne sous VB.NET
Dim NomFic As String
NomFic = "C:\Temp\Test.tif"
ImageDoc = Engine.PrepareAndOpenImage(NomFic)
Je vais faire la même chose en WinDev et me déclarer une variable de type String (.Net) et nom pas un type chaine WinDev ce qui me donne le code suivant:
NomFic est "String"("C:\Temp\Test.tif")
ImageDoc = Engine>>PrepareAndOpenImage(NomFic)
Ma variable NomFic semble bien fonctionner, je peux accéder aux méthodes de la classe String (ex: Info(NomFic:ToString() ). Sauf que j'obtiens encore l'erreur suivante:
Erreur à la ligne 64 du traitement Clic sur Bouton1.
Vous avez appelé la méthode Automation 'PrepareAndOpenImage'.
Le paramètre 1 n'est pas convertible en paramètre automation.
Types incompatibles durant une affectation.
Informations techniques
Projet : TestOCR
Dump de l'erreur du module <WD110VM.DLL> <11.00Qa>.
- Appel WL :
Traitement de <Fenêtre1.Bouton1>, ligne <64>, thread <0>
- Niveau : erreur fatale (EL_FATAL)
- Code erreur : 1053
- Code erreur WD55 : 0
- Pas de code d'erreur système
- Pas de message d'erreur système
- Que s'est-il passé ?
Vous avez appelé la méthode Automation 'PrepareAndOpenImage'.
Le paramètre 1 n'est pas convertible en paramètre automation.
Types incompatibles durant une affectation.
- Infos de debug :
COperationAutomation::__pPrepareParametreAppelAutomation(0)
- Infos attachées :
EIT_DATEHEURE : 20/02/2008 14:45:58
EIT_PILEWL :
Clic sur Bouton1 (Fenêtre1.Bouton1), ligne 64
- Identifiant dans le .err : 1053
Assistance
Je sais pas si ça peut aider quelqu'un ici à trouver mon problème mais on ne sait jamais... En attendant j'vais me faire un petit prog VB pour gérer ce bout de traitement mais j'aurais préféré tout incorporer directement en WinDev. Il s'agit d'un module de reconnaissance de Document en utilisant le ABBYY FineReader Engine 8.1. Si jamais quelqu'un ici à déjà réussi à le piloter via WinDev je serai heureux de savoir comment il s'y est pris. Merci à tous et bonne fin de journée...
Contribution le : 20/02/2008 21:00
|
|
|
Re: Type BSTR en WinDev |
|
Animateur WDF 
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour, Avez vous tous simplement testé :
Dim NomFic As String
NomFic = "C:\Temp\Test.tif"
ImageDoc = Engine>>PrepareAndOpenImage(ConstruitVariantAutomation(NomFic))
Contribution le : 20/02/2008 21:33
|
|
|
Re: Type BSTR en WinDev |
|
Stagiaire WDF 
Inscrit: 14/02/2008 22:00
Post(s): 7
|
Voici les nouveaux tests effectués avec l'utilisation de la fonction "ConstruitVariantAutomation": Premier test avec une variable chaine UNICODE
FicUniCode est une chaine UNICODE
FicUniCode=AnsiVersUnicode("C:\Temp\test.tif")
ImageDoc = Engine>>PrepareAndOpenImage(ConstruitVariantAutomation(FicUniCode))
Erreur Obtenue:
Erreur à la ligne 60 du traitement Clic sur Bouton1.
La fonction ConstruitVariantAutomation aurait dû renvoyer une valeur.
Informations techniques
Projet : TestOCR
Dump de l'erreur du module <WD110VM.DLL> <11.00Qa>.
- Appel WL :
Traitement de <Fenêtre1.Bouton1>, ligne <60>, thread <0>
- Niveau : erreur fatale (EL_FATAL)
- Code erreur : 1005
- Code erreur WD55 : 0
- Pas de code d'erreur système
- Pas de message d'erreur système
- Que s'est-il passé ?
La fonction ConstruitVariantAutomation aurait dû renvoyer une valeur.
- Infos de debug :
Fonction (0,120)
- Infos attachées :
EIT_DATEHEURE : 20/02/2008 15:54:17
EIT_PILEWL :
Clic sur Bouton1 (Fenêtre1.Bouton1), ligne 60
- Identifiant dans le .err : 1005
Assistance
Maintenant avec un type STRING (.Net)
NomFic est "String"("C:\Temp\Test.tif")
ImageDoc = Engine>>PrepareAndOpenImage(ConstruitVariantAutomation(NomFic))
Toujours la même erreur
Erreur à la ligne 60 du traitement Clic sur Bouton1.
La fonction ConstruitVariantAutomation aurait dû renvoyer une valeur. ect... ect...
Pour finir un dernier test avec une chaine WinDev standard
FicATrt est chaine
FicATrt="C:\Temp\Test.tif"
ImageDoc = Engine>>PrepareAndOpenImage(ConstruitVariantAutomation(FicATrt))
Résultat j'obtiens de nouveau mon bon vieux message d'erreur comme de quoi mon format n'est pas bon. Veuillez noter aussi que j'obtiens le même message d'erreur que ma variable soit chaine, chaine aszii sur 256 ou bein chaine avec caract(0) à la fin:
Erreur à la ligne 61 du traitement Clic sur Bouton1.
Vous avez appelé la méthode Automation 'PrepareAndOpenImage'.
En tentant d'invoquer la méthode <PrepareAndOpenImage> ou de lire la propriété <PrepareAndOpenImage>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 80020005, Type incorrect pour le paramètre 1'
En tentant d'invoquer la méthode <PrepareAndOpenImage>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 80020005, Type incorrect pour le paramètre 1'
En tentant de lire la propriété <PrepareAndOpenImage>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 80020003, Le membre demandé n'existe pas'
En tentant d'écrire la propriété <PrepareAndOpenImage>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 80020003, Le membre demandé n'existe pas'
Informations techniques
Projet : TestOCR
Dump de l'erreur du module <WD110VM.DLL> <11.00Qa>.
- Appel WL :
Traitement de <Fenêtre1.Bouton1>, ligne <61>, thread <0>
- Niveau : erreur fatale (EL_FATAL)
- Code erreur : 2205
- Code erreur WD55 : 0
- Pas de code d'erreur système
- Pas de message d'erreur système
- Que s'est-il passé ?
Vous avez appelé la méthode Automation 'PrepareAndOpenImage'.
En tentant d'invoquer la méthode <PrepareAndOpenImage> ou de lire la propriété <PrepareAndOpenImage>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 80020005, Type incorrect pour le paramètre 1'
En tentant d'invoquer la méthode <PrepareAndOpenImage>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 80020005, Type incorrect pour le paramètre 1'
En tentant de lire la propriété <PrepareAndOpenImage>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 80020003, Le membre demandé n'existe pas'
En tentant d'écrire la propriété <PrepareAndOpenImage>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 80020003, Le membre demandé n'existe pas'
- Pas d'info de debug
- Infos attachées :
EIT_DATEHEURE : 20/02/2008 16:01:43
EIT_PILEWL :
Clic sur Bouton1 (Fenêtre1.Bouton1), ligne 61
- Identifiant dans le .err : 130001
Assistance
Un gros merci qu'en même à drcharly93 pour sa suggestion.
Contribution le : 20/02/2008 22:05
|
|
|
Re: Type BSTR en WinDev |
|
Stagiaire WDF 
Inscrit: 26/10/2005 11:44
Post(s): 4
|
J'ai le même problème avec l'utilisation de l'ActiveX QuickTime.
J'essaies d'utiliser l'ActiveX QuickTime en WinDEV. NB: je ne veux pas utiliser l'ActiveX "Apple QuickTime Control" (QTOControl.QTControl) car trop limité.
1) L'utilitaire WDXview ne parvient pas à lister les méthodes et propriétés de l'ActiveX "QuickTime Object" (QuickTime.QuickTime) c:\program files\quictime\qtplugin.ocx WDXview le présente 2 fois dans la liste des ActiveX
2) Etant donné que je connais ces méthodes, exemple: GetPluginVersion -Name GetPluginVersion -Description Returns the version of the QuickTime plug-in. -ID 339 -Prototype BSTR GetPluginVersion();
J'essaie le code suivant:
MonObjet est un objet Automation dynamique MonObjet = ObjetActif("QuickTime.QuickTime") SI MonObjet = Null ALORS QUAND EXCEPTION DANS MonObjet = allouer un objet Automation "QuickTime.QuickTime" FAIRE Info(ExceptionInfo(errMessage)) Ferme FIN FIN MonObjet>>GetPluginVersion()
Qui me retourne une erreur... Vous avez appelé la méthode Automation 'GetPluginVersion'. En tentant d'invoquer la méthode <GetPluginVersion> ou de lire la propriété <GetPluginVersion>, l'objet Automation/ActiveX a renvoyé l'erreur suivante : 'Erreur 80004005 : ' En tentant d'invoquer la méthode <GetPluginVersion>, l'objet Automation/ActiveX a renvoyé l'erreur suivante : 'Erreur 80004005 : ' En tentant de lire la propriété <GetPluginVersion>, l'objet Automation/ActiveX a renvoyé l'erreur suivante : 'Erreur 80020003, Le membre demandé n'existe pas' En tentant d'écrire la propriété <GetPluginVersion>, l'objet Automation/ActiveX a renvoyé l'erreur suivante : 'Erreur 80070057, Un ou plusieurs arguments sont invalides'
(NB: j'ai aussi essayé avec un champ ActiveX)
Avez-vous déjà utilisé l'ActiveX QuickTime? Auriez-vous des idées...?
Merci
Contribution le : 11/09/2008 14:22
|
|
|
Re: Type BSTR en WinDev |
|
DSI WDF
Inscrit: 03/12/2004 07:46
Post(s): 235
|
Sans doute un début de piste ici : convertir un type BSTR en chaine et récproqueAttention, toutefois , il s'agit de CHAR*  Cordialement
Contribution le : 12/09/2008 08:29
|
|
|
Re: Type BSTR en WinDev |
|
Inscrit: 09/04/2003 10:06
Post(s): 3
|
a
Contribution le : 24/09/2008 17:18
|
|
|
Re: Type BSTR en WinDev |
|
Inscrit: 09/04/2003 10:06
Post(s): 3
|
Bonjour, Meme probleme lstr devrait etre = chaine unicode mais aussi probleme Le paramètre 1 n'est pas convertible en paramètre automation si je passe le parametre en dur entre "" cela fonctionne mais par une variable quelconque rien a faire Avez vous reussi? merci
Contribution le : 24/09/2008 17:24
|
|
|
Re: Type BSTR en WinDev |
|
DSI WDF
Inscrit: 03/12/2004 07:46
Post(s): 235
|
Je croyais avoir donné une piste mais je crois qu'il faut que j'y passe un peu plus de temps  Le type BSTR (Basic STRing) est un pointeur de 32 bits (comme tous les pointeurs) qui pointe vers un tableau de caractères UNICODE. En représentation UNICODE, 1 caractère est codé sur 2 octets, alors qu'en ASCII, 1 caractère est codé sur 1 octet. Ce type est utilisé par Automation pour la manipulation de chaînes de caractères. Il est défini dans les spécifications d'OLE 2.0 comme typedef OLECHAR FAR* BSTR;Voici deux fonctions en C++ utilisant l'api windows pour le transtypage en char*: Conversion d'un BSTR en char* void BSTRtoASC (BSTR str, char * &strRet) { if ( str != NULL ) { unsigned long length = WideCharToMultiByte (CP_ACP, 0, str, SysStringLen(str), NULL, 0, NULL, NULL); strRet = new char[length]; length = WideCharToMultiByte (CP_ACP, 0, str, SysStringLen(str), reinterpret_cast <char *>(strRet), length, NULL, NULL); strRet[length] = '\0'; } }
Conversion d'un char* en BSTR void ASCtoBSTR (char * str, BSTR * strRet) { if ( str != NULL ) { unsigned long length = strlen(str); int ResultLength = MultiByteToWideChar (CP_ACP,MB_PRECOMPOSED, reinterpret_cast <char *>(str),length,NULL,0); *strRet = SysAllocStringLen( NULL, ResultLength); MultiByteToWideChar (CP_ACP,MB_PRECOMPOSED, reinterpret_cast <char *>(str),length,*strRet,ResultLength); } }
En espérant que ça fasse avancer le schmilblick Cordialement
Contribution le : 25/09/2008 10:31
|
|
|
Re: Type BSTR en WinDev |
|
Inscrit: 09/04/2003 10:06
Post(s): 3
|
toujour pas de solution pour bstr en windev? merci
Contribution le : 14/10/2009 10:50
|
|
|
Re: Type BSTR en WinDev |
|
Inscrit: 19/11/2002 12:20
Post(s): 390
|
Vous avez essayé avec le type buffer?
Contribution le : 17/01/2010 20:40
|
|
Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.
|
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
|