程序分为两个大版本:1.0和2.0;主要区别是数据结构的不同;
现在希望在程序中,通过一个人为的选择框,选择版本是1.0的还是2.0的,然后根据它,
在数据交互的时候,把程序中的数据依照版本对应到相应的数据结构上,
比如
#ifdef V1.0
uint16         ReceiverMID;                 
uint16         SenderMID;                
#else
uint16         MsgTYPE;               
#endif其中的预定义能否通过人为的进行选择;
同时,这些数据结构的定义都是直接编译在程序里面的,不会开放结构的定义。个人感觉似乎无法行得通,因为预定义似乎是编译之前的行为,在已经编译好了程序之后,还能改变其结构?
如果不行的话呢,又该如何处理呢,希望路过的大神提供些思路

解决方案 »

  1.   

    目前还是自己在文件中,定义了版本获取函数,这个函数是人工选择的,在菜单栏里面进行选择,就像工具栏的显示与否类似;
    然后在数据结构定义的地方,再次的对所有的版本的数据结构进行定义,然后,在数据上传的地方,利用GetDataVersion这类函数的返回值,选择不同的数据版本,然后来读取,因为读取时是要使用sizeof(结构体)来确定要读取的长度的,还好的是,变动的地方不大,就是显示部分会有些麻烦,需要屏蔽掉版本差异的地方。
    先这两天试一试,要是可以的话,就算解决了吧,虽然没有达到最初想要的目的。
      

  2.   

    学习windows API,将数据长度放在struct的第一个参数,然后根据长度决定结构如果可行,定义一个dll,该dll拥有
    CreateXXX(int id,void** pStruct);
    DestroyXXX(int id,void** pStruct);
    等签名,将结构(类)和id绑定,然后动态连接不同版本的dll