J'essaie de définir par programme la piqûre du constructeur d'un composant COM + à partir d'une application C#. J'ai trouvé le code exemple suivant en ligne, mais il renvoie une exception:Comment définir la chaîne de constructeur d'un composant COM + à partir de .NET?
COMAdminCatalogCollection Components;
COMAdminCatalogClass Catalog = new COMAdminCatalogClass();
string strConstr;
string ApplicationName = "ApplicationName"; // case sensitive
string CompName = "MyComponent.ProgID";
COMAdminCatalogCollectionClass Applications = (COMAdminCatalogCollectionClass)Catalog.GetCollection("Applications");
Applications.Populate();
// find the correct application
foreach (COMAdminCatalogObjectClass AppObject in Applications)
{
if (AppObject.Name == ApplicationName)
{
// find matching component
Components = (COMAdminCatalogCollectionClass)(Applications.GetCollection("Components", AppObject.Key));
Components.Populate();
foreach (COMAdminCatalogObjectClass CompObject in Components)
{
if (CompObject.Name.ToString() == CompName)
{
CompObject.get_Value("ConstructorString").ToString();
CompObject.get_Value("ConstructionEnabled").ToString();
}
}
}
}
Quand je lance ce code, je reçois l'exception suivante sur la ligne 6:
Impossible de jeter l'objet COM de type ' System .__ ComObject 'au type de classe' COMAdmin.COMAdminCatalogCollectionClass '. Les composants COM qui entrent dans le CLR et ne prennent pas en charge IProvideClassInfo ou qui n'ont aucun assembly interop enregistré seront enveloppés dans le type __ComObject. Les instances de ce type ne peuvent pas être converties en une autre classe; Cependant, ils peuvent être castés en interfaces tant que le composant COM sous-jacent supporte les appels QueryInterface pour l'IID de l'interface.
Une idée où je me trompe? Ou y a-t-il un moyen plus facile de le faire?
Que voulez-vous exactement à atteindre ici? – Grzenio
Je veux définir la chaîne de constructeur pour un composant COM +. Je me rends compte que ce code ne le définira pas, mais je voulais essayer d'afficher la chaîne en premier, et je ne peux même pas le faire. –