Erro de DLL ActiveX

OK, enquanto eu nunca pensei em 2012 eu estaria escrevendo meu primeiro controle ActiveX (e sim, há uma boa razão para isso) Estou lutando para fazê-lo em execução no Windows 7 (x64).

A breve história da solução: Eu estava perdendo / codebase de algumas das minhas chamadas de regasm e também misturando processos de 32 e 64 bits, mas isso não estava sendo ajudado pelo prompt de comando VS2010 padrão misturando caminhos de 32 e 64 bits para regasm e cscript.

A longa história segue:

Eu tenho saltado entre

Criando um controle ActiveX no .net usando c #

(Opa Eu tinha o link errado ... embora pareça que o link que eu forneci inicialmente era alguém copiando a página original do blog)

Criando um controle ActiveX no .net usando c #

e

Controle ActiveX C # (CSActiveX)

E eu pareço estar construindo os projetos com sucesso (para o último eu tive que mudar o local do compilador de recursos para o local correto).

Para o primeiro projeto, estou usando o instalador sugerido, para o segundo projeto estou tentando usar o regasm diretamente.

Mas depois disso tudo desce a colina. Eu tento registrar tudo, mas também:

Não tenho ideia de como devo registrá-los ou:Não tenho ideia de como devo registrá-los.

Meu caso de teste tem sido um simples arquivo JScript contendo

var x = new ActiveXObject( "name of object" );

Qual falha com o erro:

test.js (1,1) Erro de tempo de execução do Microsoft JScript: o Automation Server não pode criar objeto

Não tenho certeza se esse é um problema de permissões ou um problema de 32 x 64 bits ou uma combinação.

Um monte de sites que oferecem ajuda sobre o ActiveX estão assumindo que você vai acessá-lo através de uma página da web, então eu tentei olhar para as permissões do IE (mesmo que eu queira carregar o controle em um programa de 3ª parte).

Eu sei que se eu usar as versões 'framework' ou 'framework64' do regasm eu posso controlar onde as entradas do registro são colocadas - e eu tenho visto algumas referências à execução do cscript como 32 ou 64 bits (o que afeta a parte do o registro é pesquisado), dependendo do shell do cmd invocado (e eu tentei nos dois sentidos, bem como tentando um shell "administrador").

Então, basicamente, neste ponto, não tenho ideia do que estou fazendo ou do que deveria estar fazendo.

Meu objetivo é registrar um controle ActiveX no Windows 7 x64 e fazer com que ele seja carregado por:

Um script de teste .js executado a partir do prompt de comando padrão do WindowsCarregue o mesmo controle em algo como o Excel 2007 VBA (somente para teste)Carregue o controle em um aplicativo de 3ª parte (RSView Studio da Rockwell) e faça com que ele seja hospedado dentro de um aplicativo VBA (e eu preciso verificar se este é um programa de 32 ou 64 bits. Eu suspeito que o primeiro)

Notas

Para o projeto que usuários o instalador (criando um controle ActiveX no .net usando c #), ele instala o código em "c: \ Arquivos de programas (x86) \" e procurando com o regedit eu encontrar entradas em "Computer \ HKEY_CLASSES_ROOT \ Wow6432Node \ CLSID \ "que, acredito, está me dizendo que a DLL foi instalada como um processo de 32 bits. Eu tentei executar meu teste cscript de ambos os 32 e 64 bits cmd e ambos falham. OBSERVE que o instalador estava criando o equivalente a "regasm / codebase" quando foi executado.

Para o projeto em que tentei usar o regasm para registrá-lo (controle ActiveX C # (CSActiveX)), ele possui algum código adicional para registrar um controle ActiveX COM. Esse código menciona o registro de servidores em processo de 32 bits (consulte ActiveXCtrlHelpers.cs)

(BTW eu também estou amaldiçoando auto correto no Safari / Lion no momento, continua mudando "DLL" minúsculas em "todos")

Editar 2012-08-07

Solicitado pela resposta de Art, descobri:

A partir do prompt de comando padrão do VS2010

Ao executar 'regasm / codebase' através do prompt de comando padrão do VS2010 (e como administrador para permitir que o regasm realize alterações), as entradas foram despejadas no registro em HKEY_CLASSES_ROOT \ Wow6432Node \ CLSID e os scripts de teste falharam no mesmo prompt.

No entanto, posso ver o controle ActiveX no Excel 2007 (32 bits)

A partir do prompt de comando x64 Win64 VS2010

Quando executado sob o prompt de comando Win64 VS2010 x64 (novamente como admin) as entradas do Registro apareciam em HKEY_CLASSES_ROOT \ CLSID, mas desta vez os scripts de teste funcionavam no mesmo prompt e também em um prompt padrão do Windows cmd (no entanto, eles falharam em um prompt de 32 bits) )

Mas!! Não consigo ver o controle X ativo do Excel 2007 (32 bits)

Agora eu só preciso descobrir qual é o equivalente no Windows do comando * nix 'which' para garantir qual regravação estou usando. o comando 'where'

Observando os prompts de comando do VS2010 e do Windows 7:

    VS2010 (standard prompt): cscript => c:\windows\system32\cscript.exe
                              regasm  => c:\windows\Microsoft.net\framework\v4.0.30319\regasm.exe

    VS2010 (x64 Win 64):      cscript => c:\windows\system32\cscript
                              regasm  => c:\windows\Microsoft.net\framework64\v4.0.30319\regasm.exe

    Windows 7  std. prompt:   cscript => c:\windows\system32\cscript.exe

    Windows 7 32 bit prompt:  cscript => c:\windows\SysWOW64\cscript.exe

Isso tudo está começando a tornar algumas das minhas confusões compreensíveis. Inconscientemente, misturei e combinei sistemas de 32 e 64 bits, mas o prompt padrão do VS2010 também não ajudou!

(e meu último incômodo - VS2010 salvando arquivos como UTF-8 com BOM)

questionAnswers(1)

yourAnswerToTheQuestion