我正在尝试给自己写一个小宏来允许我动态链接并调用具有可变参数的函数。例如,我想调用的函数有一个方法签名,如下所示:
extern void Foo(NSString *bar, NSString *format, ...);
我想调用我的宏看起来像这样:
DYNAMIC_LINK_FUNCTION_WITH_VARGS(FooFramework, Foo, void, (NSString *bar, NSString *format), (option, format))
我有一个现有的宏,我正在努力适应这个:
#define DYNAMIC_LINK_FUNCTION(framework, functionName, resultType, parameterDeclarations, parameterNames)
其中一部分是这样做的:
functionName = (resultType (*) parameterDeclarations) dlsym(Load##framework(), #functionName); \
return functionName parameterNames; \
但我不确定在哪里/如何合并“......”
以下是完整形式的原始宏:
#define DYNAMIC_LINK_FUNCTION(framework, functionName, resultType, parameterDeclarations, parameterNames) \
static resultType init##functionName parameterDeclarations; \
static resultType (*dynamicLink##functionName) parameterDeclarations = init##functionName; \
\
static resultType init##functionName parameterDeclarations \
{ \
dynamicLink##functionName = (resultType (*) parameterDeclarations) dlsym(Load##framework(), #functionName); \
return dynamicLink##functionName parameterNames; \
}