View Single Post
Old 04-13-2004, 08:40 PM   #2 (permalink)
KnifeMissile
 
KnifeMissile's Avatar
 
Location: Waterloo, Ontario
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) {&#10&#9// your implementation, here...&#10}
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!
KnifeMissile is offline  
 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76