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
Créer un fichier PDF de la contribution Imprimer


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
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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écproque

Attention, toutefois , il s'agit de CHAR*

Cordialement

Contribution le : 12/09/2008 08:29
Créer un fichier PDF de la contribution Imprimer


Re: Type BSTR en WinDev

Inscrit:
09/04/2003 10:06
Post(s): 3
a

Contribution le : 24/09/2008 17:18
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


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.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2