[英]OpenXML SDK -Converting C# to C++/CLI
我有用于创建文档的 C# 代码,我想在 C++/CLI 中编写相同的代码。
private void HelloWorld(string documentFileName)
{
// Create a Wordprocessing document.
using (WordprocessingDocument myDoc =
WordprocessingDocument.Create(documentFileName,
WordprocessingDocumentType.Document))
{
// Add a new main document part.
MainDocumentPart mainPart = myDoc.AddMainDocumentPart();
//Create Document tree for simple document.
mainPart.Document = new Document();
//Create Body (this element contains
//other elements that we want to include
Body body = new Body();
//Create paragraph
Paragraph paragraph = new Paragraph();
Run run_paragraph = new Run();
// we want to put that text into the output document
Text text_paragraph = new Text("Hello World!");
//Append elements appropriately.
run_paragraph.Append(text_paragraph);
paragraph.Append(run_paragraph);
body.Append(paragraph);
mainPart.Document.Append(body);
// Save changes to the main document part.
mainPart.Document.Save();
}
}
还请建议我任何可以找到 OpenXML SDK 的 C++/CLI 示例的链接
这是直接翻译:
private:
void HelloWorld(String^ documentFileName)
{
msclr::auto_handle<WordprocessingDocument> myDoc(
WordprocessingDocument::Create(
documentFileName, WordprocessingDocumentType::Document
)
);
MainDocumentPart^ mainPart = myDoc->AddMainDocumentPart();
mainPart->Document = gcnew Document;
Body^ body = gcnew Body;
Paragraph^ paragraph = gcnew Paragraph;
Run^ run_paragraph = gcnew Run;
Text^ text_paragraph = gcnew Text(L"Hello World!");
run_paragraph->Append(text_paragraph);
paragraph->Append(run_paragraph);
body->Append(paragraph);
mainPart->Document->Append(body);
mainPart->Document->Save();
}
msclr::auto_handle<>
通常应该被认为比try..finally
更惯用,就像std::shared_ptr<>
和std::unique_ptr<>
在 C++ 中一样。
我认为你尝试过什么? 我无权访问编译器
http://en.wikipedia.org/wiki/C%2B%2B/CLI应该可以帮助您入门。
如果您想知道如何翻译using
构造(好问题,您问过吗),我建议遵循以下几行(注意try {} finally { delete... }
idom)
private:
void HelloWorld(String^ documentFileName)
{
// Create a Wordprocessing document.
WordprocessingDocument ^myDoc = WordprocessingDocument::Create(documentFileName, WordprocessingDocumentType::Document);
try
{
// Add a new main document part.
MainDocumentPart mainPart = myDoc::AddMainDocumentPart();
//Create Document tree for simple document.
mainPart->Document = gcnew Document();
//Create Body (this element contains
//other elements that we want to include
Body body = gcnew Body();
//Create paragraph
Paragraph paragraph = gcnew Paragraph();
Run run_paragraph = gcnew Run();
// we want to put that text into the output document
Text text_paragraph = gcnew Text("Hello World!");
//Append elements appropriately.
run_paragraph->Append(text_paragraph);
paragraph->Append(run_paragraph);
body->Append(paragraph);
mainPart->Document->Append(body);
// Save changes to the main document part.
mainPart->Document->Save();
} finally
{
delete myDoc;
}
}
我想重复一遍,我目前没有可用的编译器,所以边缘可能很粗糙,但仍然应该提供一些信息
语法基本相同。 "new" 需要替换为 gcnew,即 "." 通过 -> (例如 body.Append(paragraph) 将是 body->Append(paragraph)。棘手的部分将是“使用”指令。要做到这一点 C++ 方式,你需要某种“删除”的智能指针块末尾的 object(删除意味着调用 IDisposable 接口) - 这称为 RAII。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.