Como expor um enum definido em uma biblioteca COM via interoperabilidade como o tipo de retorno de uma função c #

Espero que a pergunta seja clara, mas para esclarecer:

Eu tenho uma DLL VB6 que define um enum que estou fazendo referência na minha c # dll. O c # dll define um CCW da maneira correta com uma interface idispatch que declara uma função cujo tipo de retorno é o enum.

Ao executar o regasm recebo um aviso de que o enum não é COM visível e, portanto, a função não é exportada. Desde que ele está definido na minha biblioteca VB6 eu teria pensado que já é COM visível, uma vez que é definido em uma dll COM.

Eu percebo que posso parar de brincar e usar um int para passar o enum e apenas fazer o casting, mas é bem frustrante e eu gostaria de saber se existe um caminho.

Conforme solicitado aqui, há algum código de amostra:

VB6 dll define um enum

Public Enum myEnum
    first = 0
    second = 1
End Enum

Isso é importado através da interoperabilidade para o C # e se você visualizar os metadados, é algo como isto

[Guid("EnumGUID")]
public enum myEnum
{
    first = 0,
    second = 1        
}

Então a interface CCW é definida

[ComVisible(true)]
[Guid("InterfaceGuid")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IMyCCWInterface
{
    [DispId(1)]
    myEnum myFunction();
}

Regasm reclama que myEnum não é visível. Eu tenho que concordar com isso, já que a visão de metadados não tem o atributo com visível. Estranhamente, se eu usar outros tipos define no VB dll para argumentos da função não recebo reclamações, apenas parece ser o enum e eu estou supondo que é porque eu estou realmente expondo a implementação interopped do VB6 enum e não o enum real.

Então, eu acho que eu entendo o problema, o que eu gostaria de saber é se há uma maneira de fazer isso funcionar usando enums que não envolva hackear nenhum código intermediário ou gerado automaticamente.

questionAnswers(2)

yourAnswerToTheQuestion