繁体   English   中英

OpenXML SDK - 将 C# 转换为 C++/CLI

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM