COM初体验——新建文档并写入内容。

我想在程序里和Word交互。老师跟我说不要学COM,因为它已经过时了。但是我不想再把代码移植到C#上面,然后用VSTO——已经用了std::unordered_set!因为我使用了Copilot,结合我的思考,写了下面的代码:

#import "libid:2DF8D04C-5BFA-101B-BDE5-00AA0044DE52" // mso.dll
#import "libid:0002E157-0000-0000-C000-000000000046" // vbe6ext.olb
#import "libid:00020905-0000-0000-C000-000000000046" rename("ExitWindows", "WordExitWindows") // msword.olb
#include <stdio.h>
#include <comdef.h>

int main()
{
    if (CoInitialize(NULL) != S_OK) {
        fprintf(stderr, "初始化 COM 库失败!");
        return -1;
    }
    try {
        Word::_ApplicationPtr pWordApp;
        pWordApp.CreateInstance(__uuidof(Word::Application));
        Word::_DocumentPtr pDoc = pWordApp->Documents->Add();
        Word::RangePtr pRng = pDoc->Content;
        pRng->Text = "世界你好!";
        pRng->Font->Name = "新宋体";
        pRng->Font->Size = 14;
        pRng->Text += "你好福大!";
        pWordApp->Visible = VARIANT_TRUE;
    } catch (const _com_error& e) {
        fprintf(stderr, "COM 错误:%s", e.ErrorMessage());
    }
    CoUninitialize();
    return 0;
}

由于考虑不同版本库位置的差异,因此直接使用CLSID标识这些库。可以在注册表编辑器里面查到这些CLSID。最终运行效果如下:

其实认真阅读就可以发现,代码刚好概括了使用鼠标进行的Word操作。

这份代码目前看上去可以在Windows上移植。我使用的Word是2021版本的,64位

在弹性云服务器上安装了Word 32位,把发布版本的程序scp到服务器上,程序运行正常,如下图。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄铎彦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值