better understanding of extern "C" functions
I am just trying to further understand extern C functions. 

According to my knowledge, an extern C function is always a function you are trying call from an application that has already been compiled. Either a executable, static or dynamic library.

    extern "C" 
    {
       HRESULT CreateDevice();
       typedef HRESULT (*CREATEDEVICE)();
       
       HRESULT ReleaseDevice();
       typedef HRESULT (*RELEASEDEVICE)();
    }

So my question is...

Is my understanding correct ??

Does it always have to be a C function pointer ??'

Why must you use a typedef for each function ??

I presume that when you use the GetProcAddress(). You are allocating memory on that particulars applications HEAP and not the one you are calling it from. Therefore you must release it from that heap as well ??
better understanding of extern "C" functions
===

I am just trying to further understand extern C functions. 

According to my knowledge, an extern C function is always a function you are trying call from an application that has already been compiled. Either a executable, static or dynamic library.

    extern "C" 
    {
       HRESULT CreateDevice();
       typedef HRESULT (*CREATEDEVICE)();
       
       HRESULT ReleaseDevice();
       typedef HRESULT (*RELEASEDEVICE)();
    }

So my question is...

Is my understanding correct ??

Does it always have to be a C function pointer ??'

Why must you use a typedef for each function ??

I presume that when you use the GetProcAddress(). You are allocating memory on that particulars applications HEAP and not the one you are calling it from. Therefore you must release it from that heap as well ??