C++ 定义宏以加载vulkan函数指针时未声明的标识符

C++ 定义宏以加载vulkan函数指针时未声明的标识符,c++,vulkan,C++,Vulkan,我正试着让vulkan和cmake一起运行。我目前正在尝试动态加载 vulkan函数指针使用 在这里,他们使用一个宏的构造,使从vulkan加载程序加载所有函数指针变得更容易 现在我在以这种特殊方式加载指针时遇到了一些问题,我得到了3个可能密切相关的错误: error C2065: 'vkGetInstanceProcAddr': undeclared identifier error C2065: 'PFN_vkGetInstanceProcAddr': undeclared identifi

我正试着让vulkan和cmake一起运行。我目前正在尝试动态加载 vulkan函数指针使用

在这里,他们使用一个宏的构造,使从vulkan加载程序加载所有函数指针变得更容易

现在我在以这种特殊方式加载指针时遇到了一些问题,我得到了3个可能密切相关的错误:

error C2065: 'vkGetInstanceProcAddr': undeclared identifier
error C2065: 'PFN_vkGetInstanceProcAddr': undeclared identifier
error C2146: syntax error: missing ';' before identifier 'GetProcAddress'
在list_vulkan_functions.inl(5,1)中抛出所有

我觉得奇怪的是,在这个示例中,它们在list_vulkan_functions.inl中没有包含任何文件,所以在我看来,它抛出了“未声明标识符”的错误,这怎么可能工作?我见过很多这种方法的例子,所以我一定是做错了什么,但我似乎不知道是什么

列出vulkan函数。inl

\ifndef导出的函数
#定义导出的函数(函数)
#恩迪夫

导出的Vukan_函数(vkGetInstanceProcAddr)/确保在
Vukan_测试
命名空间中声明了
load_vukan_函数
函数,并且
Vukan_函数.h
包含在
Vukan_库.cpp

这里的关键是您必须将
LOAD_函数的结果
分配给
extern
变量
name
(基本上是
vulkan_test::vkGetInstanceProcAddr
)在
vulkan_test
命名空间中声明(请参见
vulkan_函数.h#8
-or):

vulkan_library.cpp

#include "vulkan_functions.h"
...
bool vulkan_test::load_vulkan_function(LIBRARY_TYPE const& vulkanLibrary)
{
#define EXPORTED_VULKAN_FUNCTION(name)                                                   \
    vulkan_test::name = (PFN_##name)LOAD_FUNCTION(vulkanLibrary, #name);                 \
    if (vulkan_test::name == nullptr)                                                    \
    ...

确保
load\u vulkan\u函数
vulkan\u测试
命名空间中声明,并且
vulkan\u函数.h
包含在
vulkan\u库.cpp

这里的关键是您必须将
LOAD_函数的结果
分配给
extern
变量
name
(基本上是
vulkan_test::vkGetInstanceProcAddr
)在
vulkan_test
命名空间中声明(请参见
vulkan_函数.h#8
-or):

vulkan_library.cpp

#include "vulkan_functions.h"
...
bool vulkan_test::load_vulkan_function(LIBRARY_TYPE const& vulkanLibrary)
{
#define EXPORTED_VULKAN_FUNCTION(name)                                                   \
    vulkan_test::name = (PFN_##name)LOAD_FUNCTION(vulkanLibrary, #name);                 \
    if (vulkan_test::name == nullptr)                                                    \
    ...