首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows COM自动化与锈蚀

Windows COM自动化与锈蚀
EN

Stack Overflow用户
提问于 2022-06-13 16:47:23
回答 1查看 426关注 0票数 2

我们正在使用的兄弟标签打印机(QL-系列)通过它的编程接口/SDK,称为'bPac‘。该工具是标签打印工具的一部分,目前正在从Ruby重写为Rust。在这个过程中,我被困在了Rust的Win32 32/COM/OLE上。Ruby中的一个最小的工作示例就足够简单了:

代码语言:javascript
运行
复制
doc = WIN32OLE.new "bpac.Document"
doc.open 'some_label.lbx'
doc.SetPrinter "Brother QL-810W", true

print_opts = 0
doc.StartPrint("", print_opts)
doc.PrintOut(1, print_opts)
doc.EndPrint

我希望有一个类似的简单工作的例子,在铁锈开始。由于我不熟悉Windows,所以windows-rs机箱非常强大。我想,我可能需要它的System::Com部分。以下是我的开场白:

代码语言:javascript
运行
复制
use windows::Win32::System::{Com, Ole};
use ::windows::core::Result;

pub fn print() {
    unsafe { Com::CoInitializeEx(std::ptr::null(), Com::COINIT_APARTMENTTHREADED) }.unwrap();

    let clsid = unsafe { Com::CLSIDFromProgID("bpac.Document") };
    println!("We've got a CLSID: {:?}", clsid);

    let obj: Result<Com::IDispatch> = unsafe { Com::CoCreateInstance(&clsid.unwrap(), None, Com::CLSCTX_ALL) };
    println!("IDispatch: {:?}", obj);
}

通过这种方式,我可以获得一个IDispatch对象,我应该能够查询可用的方法和属性。在调用这个低级别(非常接近于C-金属) API时遇到了问题。我找到了双赢调度板条箱,但这似乎与windows-rs没有合作.:/

EN

回答 1

Stack Overflow用户

发布于 2022-07-13 15:05:12

我想做类似的事情: COM Office/Excel自动化使用Rust。

简单地说,我已经为IDispatch::GetIDsOfNames()IDispatch::Invoke()构建了一个包装器,对于参数,我们可以使用VARIANT

以下资源帮助我建立了一个解决方案:

com/

https://qiita.com/benki/items/42099c58e07b16293609

https://learn.microsoft.com/en-us/previous-versions/office/troubleshoot/office-developer/automate-excel-from-c

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72606367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档