关于C#:可以从.h文件生成dlsym命令吗?

 2021-04-26 

Can dlsym commands be generated from a .h file?

已解决!在此处查看结果。

不确定我是否在正确的位置询问,但是有人知道基于.h文件生成dlopen和dlsym命令的正确方法吗?

我正在尝试动态加载SDL2-这是一个用C语言编写的库-但所有使用ctags提取函数及其参数列表的方法似乎都是徒劳的(要手动纠正3500个模块中的240个函数的参数列表并非如此)有趣)。

1
ctags -R -x --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f sdl /usr/include/SDL2/

ctags的结果如下:

1
2
3
extern DECLSPEC int SDLCALL SDL_SetTextureColorMod (SDL_Texture * texture,
extern DECLSPEC int SDLCALL SDL_SetThreadPriority (SDL_ThreadPriority priority);
extern DECLSPEC void SDLCALL SDL_SetWindowBordered (SDL_Window * window,

此:

1
ctags -R -x --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f sdl /usr/include/SDL2/ | grep"SDL_AddTimer"

产生这种结果:

1
SDL_AddTimer     prototype    93 /usr/include/SDL2/SDL_timer.h extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval,

在间隔之后注意缺少的参数。坏了。

我也看到这是一个东西,它显然是自动生成的,而不是手工制作的。

那么...有人知道有什么方法可以自动生成类似的东西吗?尤其是对于SDL2?

还是我应该只使用SDL函数,并手动对其进行dlsym?不要问为什么我不愿意只链接而不是使用dlopen和dlsym。


我通过使用decltype解决了这个问题。

1
typedef decltype(SDL_RenderDrawRects)* PF_SDL_RenderDrawRects;

这样,我将不需要该函数的参数列表。package器在这里找到。