我有一个旧的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
答案 0 :(得分:0)
您应该做的第一件事就是将代码提取到.dll。
然后,您可以设置解决方案,为每个Uses_MSOXXXX宏编译一个dll版本。
在应用程序中,您可以使用注册表项来确定安装的Office版本,然后动态加载与客户端版本的office相关的dll。 (使用LoadLibrary)