c# .net com dll ccw

c# - ¿Cómo incrustar.tlb como un archivo de recursos en.NET Assembly DLL?



ccw (1)

No es exactamente sencillo hacerlo con Visual Studio .NET, pero se puede hacer. En un nivel básico, lo que tienes que hacer es esto:

  1. Genere su archivo TLB, por ejemplo, "YourLibrary.tlb".

  2. Cree un archivo de script de recursos de Win32 llamado, por ejemplo, "YourLibrary.rc" utilizando un editor de texto (como el Bloc de notas o Archivo / Nuevo / Archivo ... / Archivo de texto en Visual Studio).

  3. En el archivo de script, escriba el siguiente texto textualmente (pero sustituya su nombre de archivo TLB real por supuesto):

    1 typelib "YourLibrary.tlb"

  4. Guarde el archivo de script en la misma carpeta que el archivo TLB.

  5. Desde un símbolo del sistema de Visual Studio, cambie a la carpeta con el archivo de script y compílelo con el siguiente comando:

    rc YourLibrary.rc

    Esto generará un archivo de recursos de Win32 en la misma carpeta llamada "YourLibrary.res".

  6. En Visual Studio, haga clic con el botón derecho en el nodo del proyecto (por ejemplo, "YourLibrary") en el Explorador de soluciones y seleccione Propiedades.

  7. En la pestaña Aplicación, debajo de "Recursos", seleccione la opción "Archivo de recursos" y vaya al archivo "YourLibrary.res" desde el paso 5.

  8. Guarde y reconstruya el proyecto.

El TLB ahora se incorporará como un recurso en el DLL de modo que otras aplicaciones COM puedan leerlo.

Si vuelve a generar el archivo TLB, deberá repetir el paso 5 para volver a compilar el archivo de recursos y el paso 8 para incrustar la nueva versión en el archivo DLL.

Dicho todo esto, es posible que pueda automatizar algo de esto con Build Events o al incluir objetivos personalizados de MSBuild en su archivo de proyecto, pero esa es otra discusión.

Estamos usando nuestra DLL .NET Assembly dentro de C ++ nativo a través de COM (CCW). Cada vez que hago una nueva versión de mi DLL, tengo que enviar dos archivos (.dll y correspondiente .tlb) a la tripulación que lo está utilizando en su código.

¿Es posible incrustar el archivo .tlb como un recurso en el archivo .NET DLL?