【问题标题】:How to use #import on oleaut32.dll from windows32 for 64bit project如何在 windows32 的 oleaut32.dll 上使用 #import 用于 64 位项目
【发布时间】:2019-11-27 01:39:42
【问题描述】:

我有这个大型的 Visual Studio 解决方案,目前是 32 位 (x86),用于使用标准 Windows 库、使用多字节字符集并且没有公共语言运行时支持的应用程序。我的任务是在 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,它没有工作)。

我在微软网站上查看了错误 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

【问题讨论】:

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


    【解决方案1】:

    oleaut32.dll 与 olepro32.dll 无关,不是 Typelib

    olepro32.dll 是一个 TypeLib,并公开了 IPictureIFont 接口

    您将这些接口包含在:

    #include <ocidl.h> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-01
      • 2011-09-02
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 2021-03-22
      • 2013-03-24
      • 1970-01-01
      相关资源
      最近更新 更多