Je suis en train de réaliser un Wrapper en c# pour simplifier
l'utilisation d'un composant COM.
Tout se passait plutôt (en presque...) bien jusqu'à ce que je veuille
utiliser une méthode dont l'un des paramètres est VARIANT * Values. Dans
la documentation, il est écrit que Values pointe vers un SAFEARRAY de
string.
J'ai trouvé sur Internet que le type correspondant à VARIANT était
object en C#.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Paul Bacelar
"Boblemar" wrote in message news:Ox7b%
Bonjour,
Je suis en train de réaliser un Wrapper en c# pour simplifier l'utilisation d'un composant COM. Tout se passait plutôt (en presque...) bien jusqu'à ce que je veuille utiliser une méthode dont l'un des paramètres est VARIANT * Values. Dans la documentation, il est écrit que Values pointe vers un SAFEARRAY de string. J'ai trouvé sur Internet que le type correspondant à VARIANT était object en C#.
Et là, j'obtiens une exception COM : Le type ne correspond pas. (Exception de HRESULT : 0x80020005 (DISP_E_TYPEMISMATCH))
Est-ce que quelqu'un aurait une idée ?
Bob
C'est légèrement plus compliqué ;-) http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcondefaultmarshalingforarrays.asp -- Paul Bacelar MVP VC++
"Boblemar" <arnaud.fontenoy@logicim.com> wrote in message
news:Ox7b%23EuLGHA.532@TK2MSFTNGP15.phx.gbl...
Bonjour,
Je suis en train de réaliser un Wrapper en c# pour simplifier
l'utilisation d'un composant COM.
Tout se passait plutôt (en presque...) bien jusqu'à ce que je veuille
utiliser une méthode dont l'un des paramètres est VARIANT * Values. Dans
la documentation, il est écrit que Values pointe vers un SAFEARRAY de
string.
J'ai trouvé sur Internet que le type correspondant à VARIANT était object
en C#.
Et là, j'obtiens une exception COM : Le type ne correspond pas. (Exception
de HRESULT : 0x80020005 (DISP_E_TYPEMISMATCH))
Est-ce que quelqu'un aurait une idée ?
Bob
C'est légèrement plus compliqué ;-)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcondefaultmarshalingforarrays.asp
--
Paul Bacelar
MVP VC++
Je suis en train de réaliser un Wrapper en c# pour simplifier l'utilisation d'un composant COM. Tout se passait plutôt (en presque...) bien jusqu'à ce que je veuille utiliser une méthode dont l'un des paramètres est VARIANT * Values. Dans la documentation, il est écrit que Values pointe vers un SAFEARRAY de string. J'ai trouvé sur Internet que le type correspondant à VARIANT était object en C#.
Et là, j'obtiens une exception COM : Le type ne correspond pas. (Exception de HRESULT : 0x80020005 (DISP_E_TYPEMISMATCH))
Est-ce que quelqu'un aurait une idée ?
Bob
C'est légèrement plus compliqué ;-) http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcondefaultmarshalingforarrays.asp -- Paul Bacelar MVP VC++
Boblemar
Paul Bacelar a écrit :
"Boblemar" wrote in message news:Ox7b%
Bonjour,
Je suis en train de réaliser un Wrapper en c# pour simplifier l'utilisation d'un composant COM. Tout se passait plutôt (en presque...) bien jusqu'à ce que je veuille utiliser une méthode dont l'un des paramètres est VARIANT * Values. Dans la documentation, il est écrit que Values pointe vers un SAFEARRAY de string. J'ai trouvé sur Internet que le type correspondant à VARIANT était object en C#.
Et là, j'obtiens une exception COM : Le type ne correspond pas. (Exception de HRESULT : 0x80020005 (DISP_E_TYPEMISMATCH))
Est-ce que quelqu'un aurait une idée ?
Bob
C'est légèrement plus compliqué ;-) http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcondefaultmarshalingforarrays.asp
Merci !
C'est effectivement bien plus compliqué : Je ne comprends absolument rien. L'article en question expose des signatures de méthodes... mais j'avous ne pas savoir quoi en faire : Dois-je créer un objet dont le contructeur est la signature en question ?
Paul Bacelar a écrit :
"Boblemar" <arnaud.fontenoy@logicim.com> wrote in message
news:Ox7b%23EuLGHA.532@TK2MSFTNGP15.phx.gbl...
Bonjour,
Je suis en train de réaliser un Wrapper en c# pour simplifier
l'utilisation d'un composant COM.
Tout se passait plutôt (en presque...) bien jusqu'à ce que je veuille
utiliser une méthode dont l'un des paramètres est VARIANT * Values. Dans
la documentation, il est écrit que Values pointe vers un SAFEARRAY de
string.
J'ai trouvé sur Internet que le type correspondant à VARIANT était object
en C#.
Et là, j'obtiens une exception COM : Le type ne correspond pas. (Exception
de HRESULT : 0x80020005 (DISP_E_TYPEMISMATCH))
Est-ce que quelqu'un aurait une idée ?
Bob
C'est légèrement plus compliqué ;-)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcondefaultmarshalingforarrays.asp
Merci !
C'est effectivement bien plus compliqué : Je ne comprends absolument
rien. L'article en question expose des signatures de méthodes... mais
j'avous ne pas savoir quoi en faire : Dois-je créer un objet dont le
contructeur est la signature en question ?
Je suis en train de réaliser un Wrapper en c# pour simplifier l'utilisation d'un composant COM. Tout se passait plutôt (en presque...) bien jusqu'à ce que je veuille utiliser une méthode dont l'un des paramètres est VARIANT * Values. Dans la documentation, il est écrit que Values pointe vers un SAFEARRAY de string. J'ai trouvé sur Internet que le type correspondant à VARIANT était object en C#.
Et là, j'obtiens une exception COM : Le type ne correspond pas. (Exception de HRESULT : 0x80020005 (DISP_E_TYPEMISMATCH))
Est-ce que quelqu'un aurait une idée ?
Bob
C'est légèrement plus compliqué ;-) http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcondefaultmarshalingforarrays.asp
Merci !
C'est effectivement bien plus compliqué : Je ne comprends absolument rien. L'article en question expose des signatures de méthodes... mais j'avous ne pas savoir quoi en faire : Dois-je créer un objet dont le contructeur est la signature en question ?
Paul Bacelar
"Boblemar" wrote in message news:
Paul Bacelar a écrit :
"Boblemar" wrote in message news:Ox7b%
Bonjour,
Je suis en train de réaliser un Wrapper en c# pour simplifier l'utilisation d'un composant COM. Tout se passait plutôt (en presque...) bien jusqu'à ce que je veuille utiliser une méthode dont l'un des paramètres est VARIANT * Values. Dans la documentation, il est écrit que Values pointe vers un SAFEARRAY de string. J'ai trouvé sur Internet que le type correspondant à VARIANT était object en C#.
Et là, j'obtiens une exception COM : Le type ne correspond pas. (Exception de HRESULT : 0x80020005 (DISP_E_TYPEMISMATCH))
Est-ce que quelqu'un aurait une idée ?
Bob
C'est légèrement plus compliqué ;-) http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcondefaultmarshalingforarrays.asp
Merci !
C'est effectivement bien plus compliqué : Je ne comprends absolument rien. L'article en question expose des signatures de méthodes... mais j'avous ne pas savoir quoi en faire : Dois-je créer un objet dont le contructeur est la signature en question ?
C'est bizarre, Je ne vois pas ma réponse du 14/02, je la reposte, au cas où.
<Dans le code du proxy généré par tlbimpl.exe> ... objMonCOMObject(..., [MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VT_BSTR)] ref String[] ar ,...) </Dans le code du proxy généré par tlbimpl.exe>
PS: il est très probable que tlbimpl.exe n'ait pas eut assez d'infos pour générer correctement le proxy
-- Paul Bacelar MVP VC++
"Boblemar" <arnaud.fontenoy@logicim.com> wrote in message
news:ehLq2tHMGHA.2580@TK2MSFTNGP14.phx.gbl...
Paul Bacelar a écrit :
"Boblemar" <arnaud.fontenoy@logicim.com> wrote in message
news:Ox7b%23EuLGHA.532@TK2MSFTNGP15.phx.gbl...
Bonjour,
Je suis en train de réaliser un Wrapper en c# pour simplifier
l'utilisation d'un composant COM.
Tout se passait plutôt (en presque...) bien jusqu'à ce que je veuille
utiliser une méthode dont l'un des paramètres est VARIANT * Values. Dans
la documentation, il est écrit que Values pointe vers un SAFEARRAY de
string.
J'ai trouvé sur Internet que le type correspondant à VARIANT était
object en C#.
Et là, j'obtiens une exception COM : Le type ne correspond pas.
(Exception de HRESULT : 0x80020005 (DISP_E_TYPEMISMATCH))
Est-ce que quelqu'un aurait une idée ?
Bob
C'est légèrement plus compliqué ;-)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcondefaultmarshalingforarrays.asp
Merci !
C'est effectivement bien plus compliqué : Je ne comprends absolument rien.
L'article en question expose des signatures de méthodes... mais j'avous ne
pas savoir quoi en faire : Dois-je créer un objet dont le contructeur est
la signature en question ?
C'est bizarre, Je ne vois pas ma réponse du 14/02, je la reposte, au cas où.
<Dans le code du proxy généré par tlbimpl.exe>
... objMonCOMObject(..., [MarshalAs(UnmanagedType.SafeArray,
SafeArraySubType=VT_BSTR)] ref String[] ar ,...)
</Dans le code du proxy généré par tlbimpl.exe>
PS: il est très probable que tlbimpl.exe n'ait pas eut assez d'infos pour
générer correctement le proxy
Je suis en train de réaliser un Wrapper en c# pour simplifier l'utilisation d'un composant COM. Tout se passait plutôt (en presque...) bien jusqu'à ce que je veuille utiliser une méthode dont l'un des paramètres est VARIANT * Values. Dans la documentation, il est écrit que Values pointe vers un SAFEARRAY de string. J'ai trouvé sur Internet que le type correspondant à VARIANT était object en C#.
Et là, j'obtiens une exception COM : Le type ne correspond pas. (Exception de HRESULT : 0x80020005 (DISP_E_TYPEMISMATCH))
Est-ce que quelqu'un aurait une idée ?
Bob
C'est légèrement plus compliqué ;-) http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcondefaultmarshalingforarrays.asp
Merci !
C'est effectivement bien plus compliqué : Je ne comprends absolument rien. L'article en question expose des signatures de méthodes... mais j'avous ne pas savoir quoi en faire : Dois-je créer un objet dont le contructeur est la signature en question ?
C'est bizarre, Je ne vois pas ma réponse du 14/02, je la reposte, au cas où.
<Dans le code du proxy généré par tlbimpl.exe> ... objMonCOMObject(..., [MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VT_BSTR)] ref String[] ar ,...) </Dans le code du proxy généré par tlbimpl.exe>
PS: il est très probable que tlbimpl.exe n'ait pas eut assez d'infos pour générer correctement le proxy
-- Paul Bacelar MVP VC++
Herve Chapalain
Voici un exemple complet qui marche. Si malgrés ca, cela ne marche toujours pas dans ton cas, peux-tu partager ton objet COM? Merci, -herve
private void button1_Click(object sender, System.EventArgs e) { string [] arString = new string[3]; arString[0] = "hello"; arString[1] = "world"; arString[2] = "this is a test"; object objarray = (object)arString;
cElements = lUBound-lLBound+1; for (int i = 0; i < cElements; i++) { if (pbstr[i]!=NULL) MessageBox(NULL, pbstr[i], L"DoSomething", MB_SETFOREGROUND); }
hr = SafeArrayUnaccessData(psa); if (FAILED(hr)) return hr;
return S_OK; }
Voici un exemple complet qui marche. Si malgrés ca, cela ne marche toujours
pas dans ton cas, peux-tu partager ton objet COM?
Merci,
-herve
private void button1_Click(object sender, System.EventArgs e)
{
string [] arString = new string[3];
arString[0] = "hello";
arString[1] = "world";
arString[2] = "this is a test";
object objarray = (object)arString;
cElements = lUBound-lLBound+1;
for (int i = 0; i < cElements; i++)
{
if (pbstr[i]!=NULL)
MessageBox(NULL, pbstr[i], L"DoSomething", MB_SETFOREGROUND);
}
hr = SafeArrayUnaccessData(psa);
if (FAILED(hr))
return hr;
cElements = lUBound-lLBound+1; for (int i = 0; i < cElements; i++) { if (pbstr[i]!=NULL) MessageBox(NULL, pbstr[i], L"DoSomething", MB_SETFOREGROUND); }
hr = SafeArrayUnaccessData(psa); if (FAILED(hr)) return hr;
return S_OK; }
Boblemar
Je te remercie de t'intéresser à mon problème. Je ne vois pas vraiment la différence entre ton exemple et celui que j'ai donné dans mon premier message (mis à part la syntaxe de ref())... J'ai testé... mais sans succès. Je ne peux malheureusement pas te transmettre l'objet COM qui pose problème : il s'agit du programme d'accès client à IBM Content Manager OnDemand... pour le faire fonctionner, il est nécessaire d'installer un serveur Content Manager OnDemand.
Merci encore
Herve Chapalain a écrit :
Voici un exemple complet qui marche. Si malgrés ca, cela ne marche toujours pas dans ton cas, peux-tu partager ton objet COM? Merci, -herve
private void button1_Click(object sender, System.EventArgs e) { string [] arString = new string[3]; arString[0] = "hello"; arString[1] = "world"; arString[2] = "this is a test"; object objarray = (object)arString;
cElements = lUBound-lLBound+1; for (int i = 0; i < cElements; i++) { if (pbstr[i]!=NULL) MessageBox(NULL, pbstr[i], L"DoSomething", MB_SETFOREGROUND); }
hr = SafeArrayUnaccessData(psa); if (FAILED(hr)) return hr;
return S_OK; }
Je te remercie de t'intéresser à mon problème.
Je ne vois pas vraiment la différence entre ton exemple et celui que
j'ai donné dans mon premier message (mis à part la syntaxe de ref())...
J'ai testé... mais sans succès.
Je ne peux malheureusement pas te transmettre l'objet COM qui pose
problème : il s'agit du programme d'accès client à IBM Content Manager
OnDemand... pour le faire fonctionner, il est nécessaire d'installer un
serveur Content Manager OnDemand.
Merci encore
Herve Chapalain a écrit :
Voici un exemple complet qui marche. Si malgrés ca, cela ne marche toujours
pas dans ton cas, peux-tu partager ton objet COM?
Merci,
-herve
private void button1_Click(object sender, System.EventArgs e)
{
string [] arString = new string[3];
arString[0] = "hello";
arString[1] = "world";
arString[2] = "this is a test";
object objarray = (object)arString;
cElements = lUBound-lLBound+1;
for (int i = 0; i < cElements; i++)
{
if (pbstr[i]!=NULL)
MessageBox(NULL, pbstr[i], L"DoSomething", MB_SETFOREGROUND);
}
hr = SafeArrayUnaccessData(psa);
if (FAILED(hr))
return hr;
Je te remercie de t'intéresser à mon problème. Je ne vois pas vraiment la différence entre ton exemple et celui que j'ai donné dans mon premier message (mis à part la syntaxe de ref())... J'ai testé... mais sans succès. Je ne peux malheureusement pas te transmettre l'objet COM qui pose problème : il s'agit du programme d'accès client à IBM Content Manager OnDemand... pour le faire fonctionner, il est nécessaire d'installer un serveur Content Manager OnDemand.
Merci encore
Herve Chapalain a écrit :
Voici un exemple complet qui marche. Si malgrés ca, cela ne marche toujours pas dans ton cas, peux-tu partager ton objet COM? Merci, -herve
private void button1_Click(object sender, System.EventArgs e) { string [] arString = new string[3]; arString[0] = "hello"; arString[1] = "world"; arString[2] = "this is a test"; object objarray = (object)arString;
cElements = lUBound-lLBound+1; for (int i = 0; i < cElements; i++) { if (pbstr[i]!=NULL) MessageBox(NULL, pbstr[i], L"DoSomething", MB_SETFOREGROUND); }
hr = SafeArrayUnaccessData(psa); if (FAILED(hr)) return hr;