Ошибка DLL ActiveX

Хорошо, хотя в 2012 году я никогда не думал, что буду писать свой первый элемент управления ActiveX (и да, для этого есть веские причины), я изо всех сил пытаюсь запустить его под Windows 7 (x64).

The Solution Short Story:  Я пропускал / codebase из некоторых моих вызовов regasm, а также смешивал 32- и 64-битные процессы, но это не помогло стандартной командной строке VS2010, смешивающей 32- и 64-битные пути для regasm и cscript.

The long story follows:

Я прыгал между

Создание элемента управления ActiveX в .Net с использованием C #

(Oops  У меня была неправильная ссылка .. хотя похоже, что ссылка, которую я изначально предоставил, была копией оригинальной страницы блога)

Создание элемента управления ActiveX в .Net с использованием C #

а также

Элемент управления C # ActiveX (CSActiveX)

И я, кажется, успешно строю проекты (для последнего мне пришлось изменить местоположение компилятора ресурса на правильное местоположение).

Для первого проекта я использую предложенный установщик, для второго проекта я пытаюсь использовать regasm напрямую.

Но после этого все идет вниз по склону. Я пытаюсь зарегистрировать все, но либо:

I have no idea how I should be registering them, or: I have no idea how I should be registering them.

Мой тестовый пример был простым файлом JScript, содержащим

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

Который терпит неудачу с ошибкой:

test.js(1,1) Microsoft JScript runtime error: Automation Server can't create object

Я не уверен, если это проблема с разрешениями, или проблема 32 или 64 бит или их комбинация.

Многие сайты, предлагающие помощь по ActiveX, предполагают, что вы будете получать к ней доступ через веб-страницу, поэтому я попытался просмотреть разрешения IE (хотя я хочу загрузить элемент управления в программу третьей части).

Я знаю, что я использую «каркас»; или «framework64»; Версии regasm Я могу контролировать, куда помещаются записи реестра - и я видел некоторые ссылки на запуск cscript как 32- или 64-разрядных (что, возможно, влияет на то, какая часть реестра ищется) в зависимости от вызванной оболочки cmd (и я пробовал оба способа, а также "оболочку администратора").

Так что в основном на данный момент я понятия не имею, что я делаю или что я должен делать.

Моя цель - зарегистрировать элемент управления ActiveX в Windows 7 x64 и загрузить его:

A test .js script running from the default Windows command prompt Load the same control into something like Excel 2007 VBA (for testing only) Load the control into a 3rd part application (RSView Studio from Rockwell) and have it hosted within a VBA application (and I need to check if this isa 32 or 64bit program .. I suspect the former)

Notes

Для проекта, в котором используется установщик (создание элемента управления ActiveX в .Net с использованием C #), он устанавливает код в & quot; c: \ program Files (x86) \ & quot; и, глядя с помощью regedit, я нахожу записи в разделе "Компьютер \ HKEY_CLASSES_ROOT \ Wow6432Node \ CLSID \ & quot;" Я полагаю, это говорит мне о том, что DLL была установлена как 32-битный процесс. Я попытался запустить свой тест cscript как из 32-, так и из 64-битного cmd, и они оба не сработали. Обратите внимание, что установщик создавал эквивалент «regasm / codebase» когда он побежал.

Для проекта, в котором я пытался использовать regasm для его регистрации (элемент управления C # ActiveX (CSActiveX)), у него есть дополнительный код для регистрации элемента управления ActiveX COM. В этом коде упоминается регистрация 32-битных внутрипроцессных серверов (см. ActiveXCtrlHelpers.cs).

(Кстати, в настоящий момент я также ругаю автокоррекцию в Safari / Lion, постоянно меняя строчную букву «DLL» на «все»)

Edit 2012-08-07

На основании ответа Art я обнаружил:

From standard VS2010 command prompt

При запуске «regasm / codebase» через стандартную командную строку VS2010 (и как администратор, разрешивший regasm вносить изменения), записи были выгружены в реестр в HKEY_CLASSES_ROOT \ Wow6432Node \ CLSID, и тестовые сценарии не были выполнены в той же строке.

Однако я вижу элемент управления ActiveX в Excel 2007 (32-разрядная версия)

From x64 Win64 VS2010 command prompt

При запуске из командной строки VS2010 x64 Win64 (снова под учетной записью администратора) записи реестра появлялись в HKEY_CLASSES_ROOT \ CLSID, но на этот раз тестовые сценарии работали из того же приглашения, а также из стандартного приглашения Windows cmd (однако они не выполняются из 32-разрядного приглашения). )

Но!! Я не вижу активного элемента управления X из Excel 2007 (32-разрядная версия)

Now I just need to figure out what the windows equivalent of the *nix 'which' command to ensure which regasm I am using) «где» команда

Рассматривая командные строки VS2010 и 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

Все это начинает понимать некоторые мои недоразумения. Я неосознанно смешивал и сопоставлял 32- и 64-битные системы, но стандартное приглашение VS2010 тоже не помогло!

(и моя последняя мозоль - VS2010, сохраняющий файлы как UTF-8 с спецификацией)

Ответы на вопрос(1)

Ваш ответ на вопрос