【发布时间】:2011-02-17 15:21:06
【问题描述】:
我正在尝试使用 OpenCL,为了将其投入生产,我希望能够动态绑定到 OpenCL.DLL(在 Windows 下),以便“优雅地”处理以下情况主机上没有安装 OpenCL。
是否有任何可用的库(或代码 sn-p)来处理 C 或 C++ 中的这种动态绑定,就像 GLEW 为 OpenGL 所做的那样?我想避免麻烦自己做。
谢谢,
【问题讨论】:
标签: c++ c dll opencl dynamic-linking
我正在尝试使用 OpenCL,为了将其投入生产,我希望能够动态绑定到 OpenCL.DLL(在 Windows 下),以便“优雅地”处理以下情况主机上没有安装 OpenCL。
是否有任何可用的库(或代码 sn-p)来处理 C 或 C++ 中的这种动态绑定,就像 GLEW 为 OpenGL 所做的那样?我想避免麻烦自己做。
谢谢,
【问题讨论】:
标签: c++ c dll opencl dynamic-linking
【讨论】:
LoadLibraryW 函数时,clewInit 的模块名称的 const char* 被无声地转换为 LPCWSTR。然后 LoadLibrary 调用失败,似乎没有什么好的理由。花了一些时间才弄清楚。
由于您正在处理 Win32,因此最简单的解决方案是延迟加载。如果你延迟加载 OpenCL,并且编译器添加的存根找不到它,它将调用__pfnDliFailureHook2(dliFailLoadLib)。您可以在那里处理错误;如果您不提供处理程序,您将获得默认行为(程序中止)。在任何一种情况下,程序都不会对 OpenCL 产生静态依赖。
【讨论】:
__pfnDliFailureHook2 也可以处理个别功能不可用的情况,这就是dliFailGetProc 的作用。
【讨论】: