Установка элемента управления ActiveX в 64-битном IE - PullRequest
1 голос
/ 08 марта 2012

Я разработал элемент управления MFC ActiveX и создал необходимые cab-файлы и inf-файл.Он отлично работает в 32-битном IE.Когда я пытаюсь получить доступ к нему в 64-битном IE, он побуждает меня к установке, но когда я пытаюсь получить доступ к функции, происходит сбой с сообщением об ошибке «Объект не поддерживает это свойство или метод» в строке, где я вызываю функцию.Нужно ли мне делать что-то особенное для 64-битного IE?

Решение

Как уже упоминалось в yms, я скомпилировал свой элемент управления в 64-битном режиме и сгенерировал 2 CAB-файла.Я изменил веб-страницу для загрузки соответствующего CAB-файла

<script language="jscript">
document.write("<OBJECT width='600' height='300' id='ActiveXPowUpload' " 
    + "CLASSID='CLSID:FB98CEED-9DE1-4517-B30C-CDA19C6D150B' ");
if(navigator.cpuClass.toLowerCase() == "x64") {
    document.write("codebase='ActiveXPowUpload-x64.cab#Version=1,0,0,1'>\n");
} else {
    document.write("codebase='ActiveXPowUpload-x86.cab#Version=1,0,0,1'>\n");
}
document.write("<param name='UploadURL' value='http://hostname/path/to/upload/script.aspx' />\n");
document.write("<param name='EnablePopupMenu' value='false' />\n");
<!-- other parameters -->
document.write("</OBJECT>\n");

1 Ответ

1 голос
/ 08 марта 2012

32-битные DLL нельзя использовать напрямую в 64-битных приложениях. Вам необходимо создать одну DLL для каждой архитектуры ЦП.

64-разрядные версии Windows предоставляют два разных хранилища реестра, одно для 32-разрядных приложений и одно для 64-разрядных, так что вы можете зарегистрировать библиотеки DLL и библиотеки типов с одним и тем же GUID, и каждое приложение получит верный файл DLLв зависимости от архитектуры процессора, для которого он был построен.

...