如何从Windows32的oleaut32.dll上使用#import进行64位项目

时间:2019-07-18 07:19:48

标签: c++ visual-studio dll 64-bit

我有一个大型Visual Studio解决方案,该解决方案当前针对使用标准Windows库,使用多字节字符集且不提供公共语言运行时支持的应用程序为32位(x86)。我受命在64位编译它位(用于工作)。我想导入oleaut32.dll库,因为它在64位上。

当我开始更改项目的平台并进行编译时,我遇到了一些编译错误(32位函数,链接问题),现在大多数问题都已解决。问题是它导入了olepro32.dll(有效)在32位元上),它表示它是旧格式或无效的类型库(因为它是32位元库)。

我在互联网上搜索了它的64位版本,发现它是oleaut32.dll。我试图导入它,但它不会让我出现错误C1083:  c:\windows\system32\oleaut32.dll': Error loading type library/DLL

我试图更改项目属性(从No Common Language Runtime Support 更改为 Common Language Runtime Support,但无效)。

我在Microsoft网站上查找了错误C1083的原因,我怀疑其中的原因是:

  1. 第三方库问题和Vcpkg
  2. 文件可能已锁定或正在使用中
  3. 包含了错误的文件名版本
  4. 尚未预编译的头文件
  5. 该文件使用托管代码,但编译器选项/ clr不是 指定。有关更多信息,请参见/ clr(公共语言运行时 编译)
  6. 文件,目录或磁盘是只读的
  7. Visual Studio或命令行工具不足 读取文件或目录的权限。

我尝试在具有管理员权限的情况下运行Visual Studio,但这没有用。

我发现它是一个COM库,我不知道该怎么处理。

在x86平台上,代码为

#import  <olepro32.dll> rename("FONTSIZE", "FONTSIZE_OLE32") no_auto_exclude include("IFont", "IPicture")

在x64平台上,我尝试将以下代码替换为:

#import  <oleaut32.dll> rename("FONTSIZE", "FONTSIZE_OLE32") no_auto_exclude include("IFont", "IPicture")

我期望它能顺利运行,因为oleaut32.dll是位于Windows32文件夹中的64位库。但是我得到了Error loadin DLL

1 个答案:

答案 0 :(得分:0)

oleaut32.dll与olepro32.dll没有关系,并且不是Typelib

olepro32.dll是TypeLib,它公开了 IPicture IFont 接口

您可以在这些接口中添加:

#include <ocidl.h>