求思路:怎么在程序中通过版本选择选项,使用不同的数据结构来读取数据

求思路:如何在程序中通过版本选择选项,使用不同的数据结构来读取数据
程序分为两个大版本:1.0和2.0;主要区别是数据结构的不同;
现在希望在程序中,通过一个人为的选择框,选择版本是1.0的还是2.0的,然后根据它,
在数据交互的时候,把程序中的数据依照版本对应到相应的数据结构上,
比如

#ifdef V1.0
uint16         ReceiverMID;                 
uint16         SenderMID;                
#else
uint16         MsgTYPE;               
#endif

其中的预定义能否通过人为的进行选择;
同时,这些数据结构的定义都是直接编译在程序里面的,不会开放结构的定义。

个人感觉似乎无法行得通,因为预定义似乎是编译之前的行为,在已经编译好了程序之后,还能改变其结构?
如果不行的话呢,又该如何处理呢,希望路过的大神提供些思路
------解决方案--------------------
把选择的版本号保存在注册表里或自定义的状态文件里,当程序运行时先读注册表或状态文件,然后再读对应版本的数据结构.
------解决方案--------------------
还有一个办法,就是数据结构里加上版本号,这样就不用选择版本号和保存版本号了,比如数据结构第一个字节就是版本号,这样,先读第一个字节,得到版本号后再读数据结构的数据
------解决方案--------------------
学习windows API,将数据长度放在struct的第一个参数,然后根据长度决定结构

如果可行,定义一个dll,该dll拥有
CreateXXX(int id,void** pStruct);
DestroyXXX(int id,void** pStruct);
等签名,将结构(类)和id绑定,然后动态连接不同版本的dll
------解决方案--------------------
可以通过预定义.