2010-06-25 10 views
1

Lorsque des objets sont ajoutés au Registre Windows, ils apparaissent comme ceci:Quelle est la longueur maximale d'une classe COM enregistrée?

MyNamespace.MyType 

Je me souviens en cours d'exécution dans des problèmes avec mes espaces de noms et classnames étant trop longtemps en essayant de les enregistrer pour COM. Y a-t-il une limite de longueur maximale dans l'enregistrement des classes dans Windows ou COM +?

Répondre

3
  • n'a pas plus de 39 caractères.
  • ne contiennent pas de ponctuation (y compris underscores), sauf une ou plusieurs périodes.
  • pas commencer par un chiffre.
  • être différent du nom de la classe d'une application OLE 1, y compris la version OLE 1 de la même application, si elle existe. *

source = MSDN

2

Le principal moyen pour enregistrer les composants COM est par leur CLSID, une taille fixe 16 nombre d'octets. Un GUID. Vous pouvez publier un ProgID, utile pour les clients COM qui doivent utiliser une liaison tardive. Comme les langages de script.

Je ne sais pas s'il y a une limite de longueur ProgIDs, il n'y a pas celui défini dans l'infrastructure COM. Peut-être que le langage de script en a un. Je sais que vous utilisez VB6, il n'y a pas besoin d'un ProgID du tout. Il préfère la liaison anticipée (nouveau nom de classe, pas CreateObject). Ce qui est une bonne idée parce que les appels tardifs sont environ 10 000 fois plus lent.

Anyhoo, si vous souhaitez spécifier un ProgId utiliser l'attribut <ProgId>. Le format normal est AppName.ClassName, quelque chose qui devrait rarement tester n'importe quel type de limite de longueur.

+0

Je ne sais pas où nous trouvé la limite de longueur. Cela aurait pu être lors de la création d'un composant ActiveX dans VB6. Il est intéressant de noter que nous allons créer un composant .NET qui sera à la fois lié à VB6 et lié tardivement à une solution différente qui utilise un script ASP/VB classique. Merci pour votre réponse. –

+0

Les ProgID permettent d'utiliser la dernière version d'un composant, si plusieurs sont installés. La liaison tardive est indépendante de la création via CLSID ou ProgID. Si les performances sont un problème, vous pouvez le résoudre à l'aide de 'CLSIDFromProgID' avant d'instancier de nombreux objets. – peterchen

2

Parlant d'une limite au hasard sur le ' "ID Programmatic" ...

--------------------------- 
Microsoft Visual Basic 
--------------------------- 
Programmatic ID string too long '<<project_name>>.<<control_name>>'. 
The Programmatic ID must be 39 characters or less. 
--------------------------- 
OK Help 
---------------------------