It's the typedef of a function pointer.
Consider
Code:
typedef int (*FUNC)(int, int);
This is a typedef for a function that takes two ints and returns an int. The type is called FUNC.
E.g., this function would have that type:
Code:
int my_func(int a, int b) { return a + b; }
You could use that typedef in a program like this:
Code:
#include <iostream>
typedef int (*FUNC)(int, int);
int my_func(int a, int b) { return a + b; }
int my_other_func(int a, int b) { return 2*a + 3*b; }
void use_func(FUNC func) {
std::cout << func(1, 2) << '\n';
}
int main() {
use_func(my_func);
use_func(my_other_func);
}
So your typedef
Code:
typedef HRESULT (*CREATERENDERDEVICE)(HINSTANCE hDLL, ZFXRenderDevice **pInterface);
is a function type that takes a HINSTANCE and a ZFXRenderDevice** and returns an HRESULT. The type is called CREATERENDERDEVICE.
p.s., Just saw your p.s. I should perhaps add that part of the strange look of the thing is the parentheses around the asterisk and the typedef name. Those are needed to tell the compiler that the asterisk goes with the name and not the return type.
In C++, such a typedef can be written as a using statement. This makes the name more prominent.
Code:
using FUNC = int(*)(int, int);
Although you presumably can't put that in an extern "C" block.