如何在不同的MS Office版本之间切换C ++应用程序?

时间:2014-02-05 09:49:19

标签: c++ mfc ms-office c-preprocessor

我有一个旧的MFC工具将xls文件转换为txt。 它是为某些特定的数据结构而设计的,用新的框架(例如Qt)重写它并不容易。

该应用程序与excel一起使用,并且文件'Office.h',其中定义了office版本宏:

// Office.h

//#define Uses_MSO97
//#define Uses_MSO2000
//#define Uses_MSO2002
//#define Uses_MSO2003
//#define Uses_MSO2007
#define Uses_MSO2010

问题是:如何让应用程序定义计算机上存在哪个MSO版本并使用它?

我会说,我可以访问源代码。 该宏用作:

#ifdef Uses_MSO2007
#import "C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE12\mso.dll" \
    rename("DocumentProperties", "DocumentPropertiesXL") \
    rename("RGB", "RBGXL")
#import "c:\Program Files (x86)\Common Files\microsoft shared\VBA\VBA6\vbe6ext.olb"
#import "C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE" \
    rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") \
    rename("DocumentProperties", "DocumentPropertiesXL") \
    rename("ReplaceText", "ReplaceTextXL") \
    rename("CopyFile", "CopyFileXL") no_dual_interfaces
#endif

1 个答案:

答案 0 :(得分:0)

您应该做的第一件事就是将代码提取到.dll。

然后,您可以设置解决方案,为每个Uses_​​MSOXXXX宏编译一个dll版本。

在应用程序中,您可以使用注册表项来确定安装的Office版本,然后动态加载与客户端版本的office相关的dll。 (使用LoadLibrary