Tengo una .NET dll que tiene algunas interfaces \ classes que están expuestas a com. durante el procedimiento de compilación, se genera un archivo .tlb y este tlb es referenciado por algún código de C++. Como resultado, el compilador genera un archivo .tlh para el tlb..tlh generado en 2 máquinas es diferente
Cuando ejecuto la compilación localmente una de las propiedades en una de las interfaces termina con un método correspondiente en la tlh que no tiene el mismo nombre. La propiedad en el código .net se llama PropertyA y se llama get_propertyA, mientras que PropertyB termina llamada get_PropertyB. No me puse a parpadear cuando esto sucedió, solo usé el método como se define en el tlh y asumí que todo era Hunky Dory, sin embargo, cuando comencé estos cambios la compilación no funcionó para nadie más, ya que el compilador generó propiedades llamadas get_PropertyA y get_PropertyB (desajuste de caso de aviso en propertyA).
Los archivos tlb generados en ambas máquinas son idénticos (según un comparador hexadecimal) y los archivos tlh son ambos generados por la misma versión del compilador.
El procedimiento de construcción crea la TLB haciendo: regasm ruta \ a \ dll \ Mydll.dll -tlb: ruta \ a \ salida \ mydll.tlb
¿Alguna idea de por qué mi versión local termina con una propiedad con el nombre incorrecto? ¿O qué puedo hacer para solucionarlo?
ACTUALIZACIÓN: He leído que tlbexp utilizará la primera versión de la cadena que encuentre y que puede cambiar con una recompilación. Aunque no estoy usando tlbexp, me pregunté si ese era el problema. Encontré parámetros con el mismo nombre que mi método (en otros métodos) pero con una letra minúscula al inicio. Así que reemplacé todos esos. Reconstruido, sin cambios. SO Entonces renombré mi método COM. Reconstruido y obtuvo los errores de método faltantes esperados. Renombrado el método de nuevo al nombre original, y listo, parecía fijo. Como ahora parece funcionar y no puedo hacer que vuelva a fallar, no puedo probar las soluciones sugeridas, pero me gusta la idea de cambiar el nombre en caso de que esto ocurra en el futuro.
Tenga cuidado cuando use la solución alternativa de "cambio de nombre": funciona como una simple sustitución de texto y puede ocasionar resultados extraños a veces. He actualizado la respuesta para delinear eso. – sharptooth
gracias por el aviso. Lo tendré en cuenta si surgen problemas. –