Utilisation du liage précoce en CPP

Prérequis

Exemple

  • Souvent, importer un seul fichier TLB conduit à un grand nombre d’erreurs de compilation.
// Bibliothèques de types référencées croisées :

et comporte une ou plusieurs #import. Copiez-les simplement dans votre code avant d’importer la bibliothèque de types principale et faites-le dans le même ordre. Ainsi, vous éviterez le premier type de problème. Le type de problème suivant provient du fait que l’environnement C++ a un grand nombre de macros, de fonctions prédéfinies, etc., qui peuvent entrer en conflit avec les méthodes de la bibliothèque de types. Par exemple, GetType est déjà largement utilisé en C++ mais aussi Aspose.PDF l’utilise. J’ai trouvé que les attributs rename et auto_rename de la directive #import sont très pratiques pour éviter les avertissements et les erreurs possibles.

Pour plus de détails, veuillez consulter ce post. Pour plus de détails, veuillez consulter ce article.

Exemple en 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 ^liaisonPrécoce(String ^fichier)
{
    String ^texte;
    // créer ComHelper

    Aspose_Pdf::_ComHelperPtr comHelperPtr;
    HRESULT hr = comHelperPtr.CreateInstance(__uuidof(Aspose_Pdf::ComHelper));
    if (FAILED(hr))
    {
        Console::WriteLine(L"Erreur survenue");
    }
    else
    {
        // définir la licence
        Aspose_Pdf::_LicensePtr licPtr;
        licPtr.CreateInstance(__uuidof(Aspose_Pdf::License));
        licPtr->SetLicense("C:\\Temp\\Aspose.PDF.lic");
        licPtr.Release();

        // obtenir le Document
        Aspose_Pdf::_DocumentPtr docPtr;
        docPtr = comHelperPtr->OpenFile((BSTR)System::Runtime::InteropServices::Marshal::StringToBSTR(fichier).ToPointer());

        comHelperPtr.Release();

        // créer Absorber
        Aspose_Pdf::_TextAbsorberPtr absorberPtr;
        HRESULT hRes = absorberPtr.CreateInstance(__uuidof(Aspose_Pdf::TextAbsorber));

        // parcourir le texte
        docPtr->GetPages()->Accept_4(absorberPtr);

        // récupérer le texte
        BSTR texteExtrait = absorberPtr->GetText();
        texte = gcnew String(texteExtrait);
        docPtr.Release();
        absorberPtr.Release();
    }
    return texte;
}

int main(array<System::String ^> ^args)
{
    CoInitialize(NULL);
    if (args->Length != 1)
    {
        Console::WriteLine("Paramètres manquants\nUsage:testCOM <fichier pdf>");
        return 0;
    }

    String ^texte = liaisonPrécoce(args[0]);
    CoUninitialize();
    Console::WriteLine("Texte extrait:");
    Console::WriteLine("---\n{0}", texte != nullptr ? texte->Trim() : "<vide>");
    Console::WriteLine("---");
    return 0;
}