Ошибка библиотеки 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 напрямую.

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

  1. я понятия не имею, как я должен их регистрировать, или:
  2. я понятия не имею, как я должен их регистрировать.

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

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

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

1 ответов


я смог сделать эту работу как через IE, так и через vbscript, выполнив следующее:

  1. создать библиотеку классов .NET с именем "ActiveXTest"
  2. добавить класс с именем 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!";
            }
        }
    }
    
  3. скомпилировать класс. Перейдите в папку, в которой был скомпилирован класс, и выполните следующие действия из командной строки Visual Studio: regasm /codebase ActiveXTest.dll файлы

  4. чтобы проверить от a .vbs скрипт, создайте файл в notepad call test.vbs. введите в файл следующее:

    Dim myObject
    set myObject = CreateObject("ActiveXTest.MyObject")
    MsgBox(myObject.HelloWorld)
    

Откройте командную строку и перейдите туда, где вы создали тест.vbs и тип: тест wscript.vbs. Должно отображаться диалоговое окно с указанием "это адский мир из COM-компонента"

  1. чтобы проверить это из 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, я считаю, что вам нужно будет повторно зарегистрировать его.