Pergunta

Eu tenho 2 dlls .net que exponho ao COM usando REGASM.Para simplificar a referência em um cliente COM, gostaria de transformá-los em um arquivo.

Tentei converter os dois arquivos para IDL e, em seguida, copiar o conteúdo da seção Biblioteca de um para o outro e compilar novamente para .tlb com MIDL.Isso funciona bem para TypeDefs no segundo IDL, mas parece falhar quando se trata das interfaces que copiei.O visualizador OLE/COM pode ver as definições de interface, mas quando tento usar o TLB via COM, ele não consegue encontrar as interfaces que copiei.

Eu queria ter certeza, antes de gastar muito tempo nisso, de que é realmente possível diminuir IDLs dessa maneira.

Foi útil?

Solução 3

Ok, então, os problemas que eu estava enfrentando não estavam relacionados à fusão dos IDLs.

Se você deseja se fundir para as IDLs, pode fazê -lo simplesmente copiando o conteúdo de uma seção de biblioteca em uma IDL em outra. Em seguida, execute midl no arquivo mesclado para transformá -lo em um TLB.

Outras dicas

Você poderia usar ILMerge combinar primeiro os assemblies .NET e depois usar REGASM no assembly resultante?

O Ilmerge é uma utilidade para mesclar vários conjuntos .NET em um único conjunto .NET.Ele funciona em executáveis ​​e DLLs e vem com várias opções para controlar o processamento e o formato da saída.

Não vejo uma maneira óbvia de isso falhar. Você disse que fundiu as seções da biblioteca, mas não disse que copiou as declarações da interface do outro .idl. Isso seria uma explicação óbvia, mas improvável,.

Um modo de falha é quando o aplicativo cliente usa a biblioteca de tipos para preencher os ponteiros da interface nos limites do apartamento ou fora do processo. Isso, no entanto, requer chaves de registro em interfaces hkcr. .NET não os cria, você teria que fazer isso sozinho. Você saberia se o fez, também não é uma explicação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top