Ошибка библиотеки DLL ActiveX
хорошо, хотя я никогда не думал, что в 2012 году я буду писать свой первый элемент управления ActiveX (и да, для этого есть веская причина), я борюсь с его запуском под Windows 7 (x64).
Решение Короткий Рассказ: мне не хватало / codebase из некоторых моих вызовов regasm, а также смешивания 32 и 64-битных процессов, но этому не помогала стандартная командная строка VS2010, смешивающая 32 и 64-битные пути для regasm и cscript.
в длинная история следует:
я подпрыгивал между
создание элемента управления ActiveX в .Net с помощью C#
(Упс у меня была неправильная ссылка .. хотя похоже, что ссылка, которую я изначально предоставил, была кем-то, копирующим оригинальную страницу блога)
создание элемента управления ActiveX в .Net с помощью C#
и
элемент управления ActiveX C# (CSActiveX)
и я, похоже, успешно строю проекты (для последнего мне пришлось изменить местоположение компилятора ресурсов на правильное местоположение).
для первого проекта я использую предложенный установщик, для второго проекта я пытаюсь использовать regasm напрямую.
но после этого все идет под гору. Я пытаюсь зарегистрировать все, но либо:
- я понятия не имею, как я должен их регистрировать, или:
- я понятия не имею, как я должен их регистрировать.
мой тестовый случай был простым файлом JScript, содержащим
var x = new ActiveXObject( "name of object" );
который терпит неудачу с ошибкой:
1 ответов
я смог сделать эту работу как через IE, так и через vbscript, выполнив следующее:
- создать библиотеку классов .NET с именем "ActiveXTest"
-
добавить класс с именем MyObject, который определяется следующим образом:
namespace ActiveXTest { [System.Runtime.InteropServices.ComVisible(true)] [System.Runtime.InteropServices.ProgId("ActiveXTest.MyObject")] [System.Runtime.InteropServices.Guid("df2dac4d-ba8a-4ecc-b76e-958c1bc32f1f")] public class MyObject { public string HelloWorld() { return "This is Hello World from the COM component!"; } } }
скомпилировать класс. Перейдите в папку, в которой был скомпилирован класс, и выполните следующие действия из командной строки Visual Studio: regasm /codebase ActiveXTest.dll файлы
-
чтобы проверить от a .vbs скрипт, создайте файл в notepad call test.vbs. введите в файл следующее:
Dim myObject set myObject = CreateObject("ActiveXTest.MyObject") MsgBox(myObject.HelloWorld)
Откройте командную строку и перейдите туда, где вы создали тест.vbs и тип: тест wscript.vbs. Должно отображаться диалоговое окно с указанием "это адский мир из COM-компонента"
-
чтобы проверить это из IE, я создал тест.HTML-файл со следующим содержимым:
<HTML> <HEAD> <script language="JScript" language="JavaScript"> var obj = new ActiveXObject("ActiveXTest.MyObject"); alert(obj.HelloWorld()); </script> </HEAD> <body> <span>nothing to see here!</span> <body> </HTML>
откройте тест.HTML-файл в IE. Вы получите предупреждение о элементе управления ActiveX; просто скажите "Да", чтобы разрешить взаимодействие. Вы получите диалоговое окно с предупреждением "это Hello World от com-компонента".
подобные шаги можно использовать для того чтобы сделать его работать от a .JS-файл или из Excel VBA. Обратите внимание, что если вы измените подпись COM-метода сборки ActiveX, я считаю, что вам нужно будет повторно зарегистрировать его.