Extern “C” and C++ structure and typedef

I have started using C++ for win32. As we know C++ struct is same as class but default public member etc… Now I want is simple C struct that has no default constructor or copy or move operation or any other magic. Because I want to store it in file also perform memcpy, use as BYTE array etc… So I thought of defining it in header with #ifdef __cplusplus as follow.

#ifdef __cplusplus
extern "C" {
#endif

typedef struct PersonTag 
{
    int ID;
    char Name[200];

} Person, *PPerson;

#ifdef __cplusplus
}
#endif

But this only prevent name mangling for function. But struct still compile as cpp struct if in cpp file or as C struct if in C file. I tested it by including header in cpp file and in C file. Both compiles well but if I add constructor in struct body as following.

#ifdef __cplusplus
extern "C" {
#endif

typedef struct PersonTag 
{
    PersonTag();
    int ID;
    char Name[200];

} Person, *PPerson;

#ifdef __cplusplus
}
#endif

C++ compile it without err but C fails as it should be. Does that means that even if I include struct definition inside #ifdef __cplusplus it will still compile as C++ struct with all copy and move magic with it ?
I was thinking that by defining struct in side ‘ extern “C” ‘ will also produce err in cpp file if struct has c++ style constructor etc…
So my question is, Is there a way to tell c++ compiler(vc++) to consider and compile it as like it is pure C struct, no default constructor, no default destructor, move or copy like thing or anything else.

My second question is about typdefing cpp function pointer and passing this function pointer to C function which may call it back.
I am using C lib (sqlite3) and passing callback fun. Now if I typedef function pointer in cpp file by following way.

typedef int (*SQL_CALLBACK_FUN)(void* NotUsed, int argc, char** argv, char** azColName);

in Cpp file the function might be like

int Callback_GetAllPerson(void* NotUsed, int argc, char** argv, char** azColName);

and than the function pointer be

SQL_CALLBACK_FUN sql_callback_fun = Callback_GetAllPerson;

Now I am going to pass this “sql_callback_fun” function pointer to C lib function (sqlite3_exec).
My question is, here I typdef function pointer in CPP also the callback function will compile as cpp. now I am passing it to C lib as pointer and the C lib function will call back this cpp function via pointer.

Is there any runtime err I might face? or the function pointer (typdef) is same for both cpp and c. regardless of name mangling things?