すべてのopengl関数のラッパー関数を含むライブラリopengl.libがあります。関数は独自の名前空間で宣言されているため、ラッパー関数は opengl 関数と同じ名前で名前を付けることができます。したがって、ラッパー関数内では、opengl 関数は ::gl***(); で呼び出されます。
opengl.h:
namespace OpenGL {
void glFunction();
}
opengl.cpp:
void OpenGL::glFunction() {
::glFunction();
}
ここでの問題は、アプリケーションでこの opengl.lib を使用し、独自の「opengl.h」を含めると、何らかの理由で、ラッパー関数ではなく、実際の opengl 関数が直接呼び出されることです。
実際のopengl.hを含めていないことを確認したので、これは何らかのリンカの問題であるに違いありません。どうすれば解決できますか?ライブラリパスに実際のopenglライブラリもあります。そうしないと、実際のopengl関数を使用するため、opengl.libでリンカーエラーが発生するためです。したがって、実際のopenglライブラリと私のopengl.libが何らかの形で混在し、リンカーは私の代わりに実際のopengl.libを使用することにしました。
ラッパー関数の名前を別の名前に変更することでこれを解決できることはわかっていますが、同じ名前を使用したいと考えています。
この質問は、以前の質問C++ wrapper with same name?に関連しています。
最適化を無効にして Visual C++ を使用しています。