Registrar meu .net montagem para interoperabilidade COM não expor meus métodos

StackOverflow https://stackoverflow.com/questions/1001129

  •  05-07-2019
  •  | 
  •  

Pergunta

Ok, eu estou ficando louco. Eu tenho tentado fazer um .net simples reunião visível para usar como um objeto COM, mas ele não está funcionando. Eu tenho tentado um monte de diferentes aproaches mas nenhum deles trabalho. Até agora, o mais próximo que eu tenho é a que tem a menor quantidade de atributos, interfaces, registrar manualmente etc.

Eu tenho um vbscript como um teste que tem esta aparência:

Dim o
o = CreateObject("MyNamespace.MyClass")
msgbox o.Test()

O meu código c # esta aparência:

using System;
using System.Runtime.InteropServices;
namespace MyNamespace 
{
  [ProgId("MyNamespace.MyClass")]
  public class MyClass
  {
    public string Test()
    {
       return "teststring";
    }
  }
}

No meu projeto (VS2008) Eu selecionei 'Make assembly COM visível' -., Que acrescentou um atributo aos meus AssemblyInfo.cs e eu também verificado 'Registar para interoperabilidade'

Posso ver que o ProgId realmente não faz diferença (no meu caso de qualquer maneira) - contanto que eu especificar o namespace verdadeiro + classname, eu posso no entanto substituí-lo, que eu acho que é bom

.

O problema é - minha CreateObject vai bem, mas o teste () método não pode ser encontrado. Na verdade, se eu tomar a dll e extrair o tlb e esperar que eu vejo nenhum método em tudo.

O erro que eu vejo é o seguinte:

C: \ inetpub \ wwwroot \ ASPTest \ testrun.vbs (3, 1) Microsoft VBScript erro de execução: O objecto não suporta esta propriedade ou método: 'Test'

Eu adoraria algum feedback, mas apenas para que você sabe o que eu tenho tentado. Eu brincando com Guid e AttributeGuid na classe, definindo a ComVisible explicitamente na classe assim eu não tentou registrar para interoperabilidade e em vez fez regasm / codebase / regfile.

Uma última nota - a maioria meu teste tem girado em torno de um não-assinado montagem, mas tentando identificar o erro eu tentei com um StrongName / chave tão bem, mas não fez nada

.

Alguém pode me ajudar a encontrar o problema, por favor?

Foi útil?

Solução 2

Eu comecei desde o início e nada removido sobre interoperabilidade COM no meu projeto, eu então adicionado

[Guid(...some guid...)]
[ComVisible(true)]

em MyClass e eu adicionei um StrongName (usado a configuração projeto para defini-lo -. Em vez de defini-lo nos AssemblyInfo.cs

Quando eu compilado a assembléia, eu copiou os arquivos para outro local, onde eu fiz um

regasm MyNamespace.MyClass.dll /codebase /regfile

Então eu corri e aceitou a entrada de registo.

Isso fez com que ele funcione - sempre que eu fizer alterações i apenas recompilar e copiar os arquivos sobre o antigo (sem Unregistering) e, em seguida, eu só fazer:

regasm MyNamespace.MyClass.dll /codebase

... e é isso -. Alterações que fiz para MyClass são imediately visível no meu vbscript e na minha página asp

Outras dicas

Eu mencionei que eu executar o Windows 7 RC 64 bits?

Bem, eu acho que poderia explicar a minha VS não está fazendo a coisa certa: http://kbalertz.com/956933/Issues-building-project-assembly. aspx Parece VS usa a versão de 32 bits do registro e não o de 64 bits ...

Você não precisa definir alguma interface que tem os métodos, e implementar essa interface?

Isso funciona para mim:

using System;
using System.Runtime.InteropServices;
namespace MyNamespace
{

    [GuidAttribute("8DDE02DF-B31C-4d91-98A7-C64444701985")]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    public class clsCOMWraper
    {
       public string Test()
      {
         return "teststring";
      }
    }
}

thse montagem deve ser assinado.

O, cadastre-se com regasm / codebase

Eu não vejo qualquer construtor para a classe. COM Interop precisa de um construtor padrão (sem parâmetros) para que possa gerar uma interface COM com sucesso.

Tente adicionar um construtor e ver se funciona.

consultar este link-lo funcionar perfeitamente eu segui-lo e dá solução perfeita sobre o erro como "Objeto não suporta esta propriedade ou método" Ajuda Projeto

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