CPPでのアーリーバインディングの使用

前提条件

サンプル

  • 一つのTLBファイルのインポートだけで多数のコンパイラエラーが発生することがよくあります。
// 相互参照されたタイプライブラリ:

そして、一つ以上の**#importがあります。メインタイプライブラリをインポートする前にこれらをコードにコピーし、同じ順序で行ってください。これにより、最初のタイプの問題を解決できます。次の問題は、C++ 環境には多くのマクロ、事前定義された関数などがあるため、タイプライブラリのメソッドと競合する可能性があるという事実から来ます。たとえば、GetTypeはC++で既に広く使用されていますが、Aspose.PDFにも存在します。#importディレクティブのrenameおよびauto_rename**属性は、可能性のある警告やエラーを回避するのに非常に便利です。

詳細については、この投稿をご覧ください。 詳細については、この投稿をご覧ください。

C++ の例

#include "stdafx.h"
#import "C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.tlb"
#import "C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.tlb" auto_rename

#import "C:\Temp\Aspose.PDF.tlb" rename("GetType", "GetType_") auto_rename

using namespace System;
String ^earlyBinding(String ^file)
{
    String ^text;
    // ComHelper の作成

    Aspose_Pdf::_ComHelperPtr comHelperPtr;
    HRESULT hr = comHelperPtr.CreateInstance(__uuidof(Aspose_Pdf::ComHelper));
    if (FAILED(hr))
    {
        Console::WriteLine(L"エラーが発生しました");
    }
    else
    {
        // ライセンスの設定
        Aspose_Pdf::_LicensePtr licPtr;
        licPtr.CreateInstance(__uuidof(Aspose_Pdf::License));
        licPtr->SetLicense("C:\\Temp\\Aspose.PDF.lic");
        licPtr.Release();

        // ドキュメントの取得
        Aspose_Pdf::_DocumentPtr docPtr;
        docPtr = comHelperPtr->OpenFile((BSTR)System::Runtime::InteropServices::Marshal::StringToBSTR(file).ToPointer());

        comHelperPtr.Release();

        // Absorber の作成
        Aspose_Pdf::_TextAbsorberPtr absorberPtr;
        HRESULT hRes = absorberPtr.CreateInstance(__uuidof(Aspose_Pdf::TextAbsorber));

        // テキストの閲覧
        docPtr->GetPages()->Accept_4(absorberPtr);

        // テキストの取得
        BSTR extractedText = absorberPtr->GetText();
        text = gcnew String(extractedText);
        docPtr.Release();
        absorberPtr.Release();
    }
    return text;
}

int main(array<System::String ^> ^args)
{
    CoInitialize(NULL);
    if (args->Length != 1)
    {
        Console::WriteLine("パラメータが足りません\n使用方法:testCOM <pdf file>");
        return 0;
    }

    String ^text = earlyBinding(args[0]);
    CoUninitialize();
    Console::WriteLine("抽出されたテキスト:");
    Console::WriteLine("---\n{0}", text != nullptr ? text->Trim() : "<empty>");
    Console::WriteLine("---");
    return 0;
}