salut ont une API COM visible en C# qui ressemble à ce qui suit:Le passage d'un objet de C++ C# si COM
public void DoSomething(string par1, string par2, object additionalParameter)
L'idée est que basée sur la valeur des paramètres de chaîne je me attends à une autre classe comme le troisième paramètre et l'a jeté de manière appropriée dans l'implémentation (je sais que cette conception n'est pas optimale mais je n'ai pas beaucoup de flexibilité ici).
Supposons que pour une combinaison des paramètres de chaîne du type du paramètre supplémentaire est la suivante:
[ComVisible(true)]
[Serializable]
public class TestObject
{
public string String{ get; set; }
public long Long { get; set; }
}
Je dois ma méthode API à partir du code non géré; Cependant, j'ai des difficultés à créer le variant
nécessaire pour le troisième paramètre.
J'utilise le CComVariant(...)
en passant un IDispatch
pointant vers un objet Test que je viens de construire.
Supposons que pTestObject
est un pointeur IDispatch à mon TestObject, j'ai quelque chose comme ce qui suit:
CComVariant pObjectVariant(pTestObject);
DoSomething(BSTR(L"first"), BSTR(L"second"), pObjectVariant);
Cependant, lorsque la fonction C# est finalement invoqué, je vois que l'objet est de type bool
au lieu de TestObject
que je m'attendais.
Une idée?
Stefano
Quelle est la valeur de pTestObject.vt lorsque vous regardez avec le débogueur non géré juste avant l'appel? –
Il s'agit en fait de * est * de type VT_BOOL. Pas certain de pourquoi. Peut-être que c'est le défaut? –