【发布时间】:2011-06-13 01:30:31
【问题描述】:
我有一个小 DSL,它需要能够加载共享库并运行它们导出的函数。最后,一个解决的问题:dlopen、dlsym、LoadLibrary、GetProcAddress 是你跨平台使用动态库所需要的。这很容易!
C++ 不同意。
感谢dlsym 等,我得到了我需要的一切:来自库的函数指针、来自源文件的签名表示,以及……无法使用另一个调用一个。
我只是想确认一下我的想法,如果我拥有的所有类型信息都是动态的,那么使用可变参数、可变参数模板或其他魔法将无济于事。我将采用以下解决方案之一,并且还想就哪个更可取提出意见(我倾向于后者)。
将签名限制为接受和返回编组的对象指针,并为要使用该语言的每个库编写一个包装器。
将 DSL 编译为与 C 兼容的语言(阅读:C++),以便在编译时(阅读:第二次编译)可获得必要的信息。
【问题讨论】:
标签: c++ dll programming-languages shared-libraries