Dear Reza,
In case you don't have access to matlab, here are some quick tests with the netcdf C library that I made which might he helpful for point 3.
By calling:
loadlibrary('/usr/lib/libnetcdf.so','/usr/include/netcdf.h','mfilename','testproto.m')
Matlab create a file testproto.m which include the same information than the header file (such as function name and argument type, structures and enums) but as matlab structure. It also create the "thunk" file libnetcdf_thunk_glnxa64.so on my system. With the proto file, it is no longer necessary to pass the header file when you load the library:
loadlibrary('/usr/lib/libnetcdf.so',@testproto)
The name of the "thunk" can be modified by the option thunkfilename. It seems that this file is some kind of a wrapper library.
For what it is worth I have attached the file testproto.m.
Parsing the header file might not be trivial. As an intermediate step, having to hand-code the proto file would already be very useful.