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'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();
}
}
Implementação 'GetMyString.cs'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";
}
}
}
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:
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\regasm /codebase "$(TargetPath)" /tlb:"$(TargetDir)$(TargetName).lib"
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