Não é possível acessar os métodos expostos do COM no VBA
Eu estou tentando acessar métodos expostos COM no VBA.
Problema: Estou vendo todos os métodos padrão (comoGetHashCode
, GetType
eToString
) no VBA masnão aqueles que fazem parte da interface COM e especificamente escritos para serem visíveis COM (comogetStringValue()
abaixo).
Detalhes de configuração:
Visual Studio 2008Windows 7 x64Office 2007.NET 3.5Interface 'IGetMyString.cs'<code>using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace SimpleCOMAssembly { [ComVisible(true), GuidAttribute("4153A1AC-ECE9-4f66-B56C-1DDEB6514D5D")] [InterfaceType(ComInterfaceType.InterfaceIsDual)] interface IGetMyString { [DispId(1)] string getStringValue(); } } </code>Implementação 'GetMyString.cs'
<code>using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using System.ComponentModel; namespace SimpleCOMAssembly { [ComVisible(true), GuidAttribute("0A3D4D65-CF50-4020-BF13-77001F8AAABE")] [ProgId("SimpleCOMAssembly.GetMyString")] [ClassInterface(ClassInterfaceType.None)] public class GetMyString : IGetMyString { public GetMyString() { } [ComVisible(true), Description("Get my string")] public string getStringValue() { return "hello"; } } } </code>
Nas propriedades do Build, verifiquei'Tornar a montagem COM visível' (veja o instantâneo abaixo)
Também pediu ao Visual Studio 2005 para fazer o'Register for COM interop' (veja o instantâneo abaixo)
E, finalmente, como um evento post build, estou executando o regasm.exe para registrar o .DLL e também o .TLB para registrar da seguinte maneira:
<code>%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\regasm /codebase "$(TargetPath)" /tlb:"$(TargetDir)$(TargetName).lib" </code>
No modo de exibição Explorer do objeto do Excel, habilitei o servidor COM (SimpleCOMAssembly escrito acima) e, agora, no Pesquisador de Objetos, ele não lista o método da interface COM (veja abaixo)
Alguém pode me ajudar a saber o que estou perdendo, o que está causando os métodos da interface COM não mostrados no VBA?
EDITAR Anexando ITypeLib Visualização do TLB gerado