vs08 中 如何 使用 *.tlh 文件??

CCDDzclxy 2014-09-16 03:48:25
RT
在弄 VC操作 WORD的相关事情,系统 Win7+vs08

中间有一句代码 是这样的:
COleVariant FileFormat = COleVariant(wdFormatDocument);


但是,这句代码编译时出错,如下图:

“wdFormatDocument”: 未声明的标识符

我 右键-->"转到定义" 的时候,它是有定义的,但是,定义是在 msword.tlh 文件中,如下图:




我的问题是:
能否导入 msword.tlh 的内容,使得不再报 "wdFormatDocument 未声明的标识符" 的错误???
如何导入msword.tlh 的内容??



...全文
1330 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
quanjiliu10091009 2016-01-20
  • 打赏
  • 举报
回复
vs2013 + office2007 测试可以 #define RENAME_IMPORT(NAME) rename(#NAME, "_" #NAME) #import "C:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\MSO.DLL" #import "C:\Program Files (x86)\Common Files\microsoft shared\VBA\VBA6\VBE6EXT.OLB" #import "C:\\Program Files (x86)\\Microsoft Office\\Office12\\MsWord.olb" no_namespace RENAME_IMPORT(Rectangle) RENAME_IMPORT(ExitWindows) RENAME_IMPORT(FindText)
CCDDzclxy 2014-09-17
  • 打赏
  • 举报
回复
请问 Saleayas:

对于 我 19楼 的内容,有如下问题 :
1、为何 no_namespace 必须??这是在干嘛?取消MsWord.olb里面的命名空间吗??在这里的作用功效体现在什么地方??
2、我之前的代码里,没有 rename("Rectangle","_Rectangle"),它也会编译报错。
定位错误时,指向这里:


然后,就凭借上面的错误信息,判断出要将 Rectangle 重命名??
它只是提示说 “Rectangle 不是参数 _Interface 的有效模板类型变量”,怎么就联想到要 将 Rectangle 重命名呢??
CCDDzclxy 2014-09-17
  • 打赏
  • 举报
回复
现在,OK了,仅把我的处理贴出来(Win7 32位 + vs08 + office2007): 1、测试了一下,貌似 选不选Automation,在这个例子里面 确实不要紧。 2、要将 vs08 里面的 CApplication.h 的 "#import "C:\\Program Files\\Microsoft Office\\Office12\\MSWORD.OLB" no_namespace"注释掉,也换成 " #define RENAME_IMPORT(NAME) rename(#NAME, "_" #NAME) #import "C:\Program Files\Common Files\Microsoft Shared\OFFICE12\MSO.DLL" #import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" #import "C:\\Program Files\\Microsoft Office\\Office12\\MsWord.olb" no_namespace RENAME_IMPORT(Rectangle) RENAME_IMPORT(ExitWindows) RENAME_IMPORT(FindText) " 3、需要 no_namespace 4、需要 RENAME_IMPORT(Rectangle) 仅供有相同经历的人参考。 PS:还有问题请教 Saleayas,在楼下贴出来。
CCDDzclxy 2014-09-17
  • 打赏
  • 举报
回复
引用 17 楼 Saleayas 的回复:
如果你没有使用 自动化,就不会添加 AfxDisp.h ,那样 像 COleVariant 或者 COleSafeArray 这样的 OLE 对象就需要自己添加引用。 但是我觉得是否只用自动化,与你的问题没有影响。
貌似是的... 有点乱了,让我再建个工程,一步一步试试
Saleayas 2014-09-17
  • 打赏
  • 举报
回复
如果你没有使用 自动化,就不会添加 AfxDisp.h ,那样 像 COleVariant 或者 COleSafeArray 这样的 OLE 对象就需要自己添加引用。 但是我觉得是否只用自动化,与你的问题没有影响。
CCDDzclxy 2014-09-17
  • 打赏
  • 举报
回复
引用 15 楼 Saleayas 的回复:
我看到那个文章了,你需要在你自己的 .cpp 添加头文件。 使用生成的 CApplication.h 就可以了。
在创建工程的时候,不需要 勾选 Automation吗?
Saleayas 2014-09-17
  • 打赏
  • 举报
回复
我看到那个文章了,你需要在你自己的 .cpp 添加头文件。 使用生成的 CApplication.h 就可以了。
Saleayas 2014-09-17
  • 打赏
  • 举报
回复
我的编译器和你的不同,但是没有这个问题。 你可以把 msword.tlh 自己 #include 到 cpp 文件中,然后编译看看,这样就全部是源代码编译了。 看看是什么问题。 还有就是看看 msword.tlh 中是否的确没有被 namespace 包含。
CCDDzclxy 2014-09-17
  • 打赏
  • 举报
回复
可能是这个原因,帮忙看下,谢谢 : 我是按照这个教程来学习的VC++中调用word进行word表格的填写,在创建vs08 MFC的时候,也 选择了 Automation。 我测试了一下,新建一个工程,不选 Automation,你的代码就可以编译通过...
CCDDzclxy 2014-09-17
  • 打赏
  • 举报
回复
引用 10 楼 Saleayas 的回复:
添加了 no_namespace 了吗?
看 我 6楼的图,我是 有no_namespace的
Saleayas 2014-09-17
  • 打赏
  • 举报
回复
我把 no_namespace 去掉就和你的错误一样了。
Saleayas 2014-09-17
  • 打赏
  • 举报
回复
添加了 no_namespace 了吗?
CCDDzclxy 2014-09-17
  • 打赏
  • 举报
回复
引用 7 楼 Saleayas 的回复:
你看看你的 msword.tlh 里面是否定义了这个枚举。 tlh 在编译后的Obj 目录中,Debug 模式在 项目工程的 Debug 目录下。
定义了啊,我楼顶就贴了图了啊... 在目录"...\Word2007_MFC(vs08)\Word2007_MFC(vs08)\Debug"中 有 msword.tlh、msword.tli,没有 msword.obj
Saleayas 2014-09-17
  • 打赏
  • 举报
回复
我是 Windows Server 2012 R2, Windows Ofiice 2013, Visual Stdio 2013. 编译成功。
Saleayas 2014-09-17
  • 打赏
  • 举报
回复
你看看你的 msword.tlh 里面是否定义了这个枚举。 tlh 在编译后的Obj 目录中,Debug 模式在 项目工程的 Debug 目录下。
CCDDzclxy 2014-09-17
  • 打赏
  • 举报
回复
引用 5 楼 Saleayas 的回复:
#define RENAME_IMPORT(NAME) rename(#NAME, "_" #NAME)

#import "C:\Program Files\Common Files\Microsoft Shared\OFFICE15\MSO.DLL"
#import "C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
#import "C:\\Program Files\\Microsoft Office\\Office15\\MsWord.olb" no_namespace RENAME_IMPORT(Rectangle) RENAME_IMPORT(ExitWindows) RENAME_IMPORT(FindText)

WdSaveFormat a = wdFormatDocument;


我这样是可以编译的。

按照你的做了,也还是 报错...


我Win7(32位)+VS08+office2007

你呢?

Saleayas 2014-09-17
  • 打赏
  • 举报
回复
#define RENAME_IMPORT(NAME) rename(#NAME, "_" #NAME)

#import "C:\Program Files\Common Files\Microsoft Shared\OFFICE15\MSO.DLL"
#import "C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
#import "C:\\Program Files\\Microsoft Office\\Office15\\MsWord.olb" no_namespace RENAME_IMPORT(Rectangle) RENAME_IMPORT(ExitWindows) RENAME_IMPORT(FindText)

WdSaveFormat a = wdFormatDocument;
我这样是可以编译的。
CCDDzclxy 2014-09-17
  • 打赏
  • 举报
回复
引用 3 楼 Saleayas 的回复:
#import "C:\\Program Files\\Microsoft Office\\Office15\\MsWord.olb"
我是 Office 2013,安装目录在 Micorsoft Office\\Office15
我的项目名为 "Word2007_MFC(vs08)",我在 Word2007_MFC(vs08)Dlg.cpp 中加入语句: “ #import "C:\\Program Files\\Microsoft Office\\Office12\\MsWord.olb" \ rename("ExitWindows","_ExitWindows") \ rename("FindText","_FindText") ” 还是报错: “ error C2065: “wdFormatDocument”: 未声明的标识符 ”
Saleayas 2014-09-17
  • 打赏
  • 举报
回复
#import "C:\\Program Files\\Microsoft Office\\Office15\\MsWord.olb"
我是 Office 2013,安装目录在 Micorsoft Office\\Office15
CCDDzclxy 2014-09-17
  • 打赏
  • 举报
回复
引用 1 楼 Saleayas 的回复:
#import
类似这样:“#import "???\\Word2007_MFC(vs08)\\Word2007_MFC(vs08)\\Debug\\msword.tlh"”? 不行啊,报错:”错误 23 fatal error C1083: 无法打开类型库文件:“???\word2007_mfc(vs08)\word2007_mfc(vs08)\debug\msword.tlh”: 加载类型库/DLL 时出错。 “
加载更多回复(6)

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧