模块导入 (C++) --- 错误“模块文件映射无效”

Posted

技术标签:

【中文标题】模块导入 (C++) --- 错误“模块文件映射无效”【英文标题】:Module importing (C++) --- ERROR "module file mapping invalid" 【发布时间】:2022-01-13 17:34:54 【问题描述】:

ImageLoader.cpp // 错误:'SafeReleaseM' 的 E3344 模块文件映射无效

import  SafeReleaseM;
import <wincodec.h>;
import <d2d1.h>;

class ImageLoader;

SafeReleaseM.ixx

export module SafeReleaseM;

export template <class T> void SafeRelease(T** type)

    if (*type)
    
        (*type)->Release();
        *type = NULL;
    

我已将标准设置为最新的 C++ 标准和 C 标准,将我的源文件夹添加到模块依赖目录,启用扫描模块。

在我看来,这是一个非常基本的模块测试,我做错了什么吗?我是 S.O 的新手,所以如果我应该添加其他设置信息,请告知。

编辑:我正在使用 Visual Studio 2022 社区 (msvc)

编辑#2:在一个单独的项目中,类似的方法可以导出模板函数。也许我的项目配置有问题。

【问题讨论】:

ImageLoader.cpp 正在构建什么模块?因为您不能从不是本身模块的源文件导入模块。另外,您使用的是什么编译器和构建工具? @NicolBolas 你是说“ImageLoader.cpp”本身必须是一个模块才能导入“SafeReleaseM.ixx”吗? “ImageLoader”是一个包含加载图像逻辑的文件。它导入“SafeReleaseM”以使用安全释放指针的 [SafeRelease] 模板函数。另外,我正在使用带有 VS 2022 的 msvc 其实没有;我误读了标准中的某些内容。 在进一步测试模块后,我发现我在尝试使用模板函数时得到了这个,但不是 int/char/normal void: 您应该在问题中添加有效和无效的特定代码。 【参考方案1】:

创建一个新项目并将相同的代码粘贴到工作中。

不确定是什么导致了 Visual Studio 文件映射问题,但我所做的不同之处在于在一个新项目中,我通过解决方案资源管理器窗口创建了文件。 - 错误可能与依赖/配置相关。或由更新引起。

【讨论】:

以上是关于模块导入 (C++) --- 错误“模块文件映射无效”的主要内容,如果未能解决你的问题,请参考以下文章

__init__.py 是 python 的后裔,但不是来自 c++;导致“导入 matplotlib”错误

Python 3.8:运行外部 C++ 代码:无法导入模块

c++动态加载dll报错

如何在 C++ 程序将使用的 Python 脚本中导入 cpython 模块?

numpy.core.multiarray 在通过 xcode 中开发的 C++ 应用程序调用 python 模块时导入失败

在 MS VC 2013 Express 中将 C++ dll 从 32 位转换为 64 位