How well do you know C++?
In C++, it's possible to have two functions with exactly the same function names, as long as they have a different
signature. A function's
signature is its parameters, their types, and the order they're declared (this includes no parameters, as well). How this is implemented in C++ is that the function's name is modified in a determinisitic and canonical way, depending on it's parameters. This process is often called
name mangling although, officially, the function name is said to be
decorated.
So, when your C linker goes looking into an object file made by your C++ compiler, it's looking for _GetCpuUage while the function has been "decorated" to something like _GetCpuUsage@@YA_NPAM@Z.
To stop C++ from
decorating your function name, you use the
extern "C" keyword(s). So, in the C++ header, you'd export the function like this:
Code:
extern "C" bool GetCpuUsage(float* percentage);
...and in your C++ source file, you'd have something like:
Code:
extern "C" bool GetCpuUsage(float* percentage) {
	// your implementation, here...
}
The function name
GetCpuUsage won't get "mangled" and your C linker should be able to find it.
Actually, C++ programmers prefer to wrap the C++ function in a C function and export
that so that they can both be used but I get the sense that you're not a C++ programmer, so this won't concern you.
I hope you found this interesting and helpful--so, happy programming!