Visual studio 为Windows 7/64位创建XLL Excel加载项(在Windows XP/32上交叉编译)
我不是一个熟练的Windows程序员,但我为32位Windows XP/Excel创建并维护了一个XLL插件已经很多年了。我现在想创建一个Windows 7/64位版本,但遇到了问题-我甚至无法让Generic.xll示例工作 这是我所做过的最简单的版本——抱歉,这太长太迂腐了 在我安装了Visual Studio 2010 Professional的Windows XP/32计算机上:Visual studio 为Windows 7/64位创建XLL Excel加载项(在Windows XP/32上交叉编译),visual-studio,excel,windows-7,64-bit,xll,Visual Studio,Excel,Windows 7,64 Bit,Xll,我不是一个熟练的Windows程序员,但我为32位Windows XP/Excel创建并维护了一个XLL插件已经很多年了。我现在想创建一个Windows 7/64位版本,但遇到了问题-我甚至无法让Generic.xll示例工作 这是我所做过的最简单的版本——抱歉,这太长太迂腐了 在我安装了Visual Studio 2010 Professional的Windows XP/32计算机上: 下载并安装了Microsoft Excel 2013 SDK 开始菜单-“打开Visual Studio
- 下载并安装了Microsoft Excel 2013 SDK
- 开始菜单-“打开Visual Studio x64交叉工具命令提示符(2010)”
- 设置类型=释放
- SET PLATFORM=x64//我认为这是预设的
- cd C:\2013办公系统开发人员资源\Excel2013XLSDK\SAMPLES\FRAMEWRK
- nmake//没有错误
- cd C:\2013办公系统开发人员资源\Excel2013xlsdk\SAMPLES\GENERIC
- nmake//没有错误
- 将生成的C:\2013 Office System Developer Resources\Excel2013xlsdk\SAMPLES\GENERIC\x64\RELEASE\GENERIC.xll复制到Windows 7/64计算机可访问的网络文件夹中
- 启动Excel 2013
- 文件-选项-加载项-管理Excel加载项-浏览,转到包含Generic.xll的网络文件夹,单击它
- 允许Excel将Generic.xll复制到标准文件夹。它以静默方式加载,没有消息(包括没有消息说它加载了Generic.xll)
- 不显示Generic.xll中的任何功能
- 关闭并重新打开Excel-重新打开后,我会收到一个消息框,上面说“GENERIC.xll的文件格式和扩展名不匹配。该文件可能已损坏或不安全…”(如果我说“是”,它会像文本文件一样加载,在电子表格中显示xll中的二进制代码。)
- 运行“由Steve p.Miller开发的Win64(x64)版本2.2.600的依赖项Walker”
- 文件-Open-Generic.xll
- 它表明它找不到:
--XLCALL32.DLL//根据我在Windows XP中使用XLL的典型经验
--API-MS-WIN-CORE-COM-L1-1-0.DLL
--API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL
--API-MS-WIN-CORE-WINRT-L1-1-0.DLL
--API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL
--API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
--API-MS-WIN-SHCORE-SCALLING-L1-1-0.DLL
--DCOMP.DLL
--IESHIMS.DLL//典型的Windows XP XLL工作经验
蒂姆听起来你好像知道一些这方面的事情。XLCALL32和IESHIMS不属于您的问题
我猜这是一个64位的问题。我最终成功地使用64位构建。也许你可以在那里找到一些有用的东西。注意XLL加载过程。这不是我们在编写代码时所期望的由正常进程加载的简单DLL加载 如果您有一个运行完美的测试程序,但随后您将工作代码添加到Excel加载项,并收到“此文件可能已损坏或不安全”消息。。。我建议你:
- 检查初始化代码以查找Excel在加载过程中不允许的调用李>
- 这个问题可以很简单地通过延迟初始化来解决李>
// within the AutoLoad event handler
static bool init_completed = false;
if ( init_completed == false )
{
initialize_all();
init_completed = true;
}
这允许Excel成功加载XLL。在调用自动加载事件时,Excel似乎没有对代码施加任何限制-允许执行初始化代码
不过,自动加载事件可能不是最佳位置-YMMV-因此,如果您发现更好的内容,请更新此页面
我真的希望下次我犯这个错误时能很快找到这个页面 您是否尝试使用Dependency Walker查看加载XLL时的错误?