¿Qué hace tlbimp que el IDE de Visual Studio no hace?

Tengo una DLL COM escrita en C++ no administrado y compilada con VS 2010. Puedo registrar la DLL usando regsvr32 y puedo invocarla a través de VBscript.

Cuando trato de agregarle una referencia, al crear un cliente C#, no veo el objeto COM en la lista Agregar referencia -> pestaña COM. Si busco manualmente el archivo DLL e intento seleccionarlo, dice que el archivo DLL no es un componente ensamblado o COM válido.

Ahora, puedo usar la herramienta tlbimp para generar una DLL de interoperabilidad y usarla para agregarla como referencia a mi cliente C#. Y todo funciona bien.

Mis preguntas son las siguientes:

  1. ¿Por qué el COM original no aparece en la pestaña COM en el cuadro de diálogo Agregar referencia cuando está registrado a través de regsvr32?
  2. ¿Por qué VS IDE piensa que no es un COM válido cuando puedo invocarlo desde el código nativo de VBScript y C++?
  3. ¿Qué hace exactamente tlbimp que el IDE no puede hacer?
  4. ¿Qué necesito leer más para mejorar mi comprensión de las bibliotecas de tipos y la interoperabilidad en juego aquí?

preguntado el 27 de julio de 12 a las 16:07

1 Respuestas

Parece un problema de biblioteca de tipos: es posible que sus clases COM se hayan registrado correctamente, pero su biblioteca de tipos probablemente no lo esté. ¿Quizás olvidó invocar RegisterTypeLib desde su función DllRegisterServer?

En referencia a tus preguntas:

  1. El cuadro de diálogo busca bibliotecas de tipos registradas, no clases COM.

  2. VBscript invoca IDispatch y no se preocupa por las librerías de tipos. tlbimp no se preocupa por IDispatch y requiere una biblioteca de tipos

  3. Le pasaste el nombre de la DLL a tlbimp, por lo que tlbimp supo cómo obtener la librería de tipos. VS, por el contrario, se refiere al registro que carece de los datos de registro apropiados

Respondido 27 Jul 12, 17:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.