Visual c++ 在64位IE中安装ActiveX控件

Visual c++ 在64位IE中安装ActiveX控件,visual-c++,mfc,activex,Visual C++,Mfc,Activex,我已经开发了一个MFC ActiveX控件,并创建了必要的cab文件和inf文件。它在32位IE中运行良好。当我尝试在64位IE中访问它时,它会提示我安装,但当我尝试访问该函数时,它会失败,并在调用该函数的行中显示错误消息“Object不支持此属性或方法”。我需要为64位IE做什么特别的事情吗 解决方案 正如yms所提到的,我以64位模式编译了我的控件,并生成了2个CAB文件。我通过网页修改以下载适当的CAB文件 <script language="jscript"> documen

我已经开发了一个MFC ActiveX控件,并创建了必要的cab文件和inf文件。它在32位IE中运行良好。当我尝试在64位IE中访问它时,它会提示我安装,但当我尝试访问该函数时,它会失败,并在调用该函数的行中显示错误消息“Object不支持此属性或方法”。我需要为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");

文件。写入(“\n”);
}否则{
document.write(“codebase='ActiveXPowUpload-x86.cab#Version=1,0,0,1'>\n”);
}
文件。写入(“\n”);
文件。写入(“\n”);
文件。写入(“\n”);

32位dll不能直接用于64位应用程序。您需要为每个CPU体系结构创建一个dll


64位版本的Windows提供两种不同的注册表存储,一种用于32位应用程序,另一种用于64位应用程序,因此,您可以使用相同的GUID注册dll和类型库,并且每个应用程序将根据为其构建的CPU体系结构使用正确的dll。32位dll不能直接用于64位应用程序。您需要为每个CPU体系结构创建一个dll


64位版本的Windows提供了两种不同的注册表存储,一种用于32位应用程序,另一种用于64位应用程序,因此您可以使用相同的GUID注册dll和类型库,并且每个应用程序将根据构建它的CPU体系结构来设置正确的dll。

我想您创建了两个不同的dll,每个cpu架构一个,对吗?@yms不,我只是在尝试一个ocx文件我想你创建了两个不同的DLL,每个cpu架构一个,对吗?@yms不,我只是在尝试一个ocx文件我应该在项目设置中进行任何更改吗?是的,你需要将其配置为64位并重建,如果对一些细节不小心,您可能需要更改代码。请参阅:我已经为64位创建了cab文件,它工作正常。现在我有两个CAB文件64和32。我应该如何使html加载适当的cab?看一下,我认为这会有帮助。我应该在项目设置中进行任何更改吗?是的,您需要将其配置为64位并重新生成,如果您不注意一些细节,您可能需要更改代码。请参阅:我已经为64位创建了cab文件,它工作正常。现在我有两个CAB文件64和32。我应该如何使html加载适当的cab?看一看,我认为这会有所帮助。