# Extract return type
return_type_part = parts[0].strip()
- return_type = return_type_part.split()[0] # First word is the return type
+ modifiers = return_type_part.split()[0]
+ return_type = modifiers
+ if modifiers == "EAPI":
+ return_type = modifiers + " " + return_type_part.split()[1]
# Extract parameter list
params_part = parts[1].rstrip(');').strip()
if len(parts) >= 2:
param_type = ' '.join(parts[:-1]) # First part is the type
if parts[-1].startswith('*'):
- param_type += '*' # Preserve pointer symbol with the type
+ if parts[-1].count('*') == 1:
+ param_type += '*' # Preserve pointer symbol with the type
+ elif parts[-1].count('*') == 2:
+ param_type += '**' # Preserve pointer symbol with the type
param_name = ' '.join(parts[-1:]).lstrip('*') # Remaining parts are the name, remove pointer symbol
param_types.append(param_type)
param_names.append(param_name)
function_body = f'{return_type} {class_name}::{function_name}({", ".join(params)}) {{\n'
function_body += f' auto func =\n'
- function_body += f' reinterpret_cast<int (*)({", ".join(param_types)})>(dlsym_helper(handle_, "{function_name}"));\n'
+ function_body += f' reinterpret_cast<{return_type} (*)({", ".join(param_types)})>(dlsym_helper(handle_, "{function_name}"));\n'
function_body += f' return func({", ".join(param_names)});\n'
function_body += '}\n'