Можно ли скомпилировать C ++, который использует .NET DLL с GCC? - PullRequest
0 голосов
/ 28 октября 2019

Я хочу использовать AML.Engine.dll (https://github.com/AutomationML/AMLEngine2.1) в проекте C ++. Я получил его для работы с компилятором Microsoft C ++, но мне также нужно, чтобы он работал с GCC, но не смогпока что. Есть ли какие-либо настройки компилятора, необходимые для этого? Или это просто невозможно с GCC?

Приведенный ниже код демонстрирует простой демонстрационный проект, который я пытался запустить.

#include <iostream>
#include <string>
#include <stdlib.h> 
using namespace std;
#using <AML.Engine.dll>
#using <System.dll>
#using <System.Xml.dll>
#using <System.Xml.Linq.dll>
using namespace Aml::Engine::CAEX;

int main()
{
    // create a new empty document
    auto caexDocument = CAEXDocument::LoadFromFile("BSM_Project_210219_V3.1.aml");
    CAEXDocument^ doc = CAEXDocument::New_CAEXDocument();

    for each(auto instanceHierachy in caexDocument->CAEXFile->InstanceHierarchy){
        for each(auto element in instanceHierachy->InternalElement){
            System::Console::WriteLine( element->Name) ;
            System::Console::WriteLine( "----------------------------------------------------------") ;
            for each(auto ielement in element->InternalElement){  
                System::Console::WriteLine( ielement->Name) ;
            }

        }  

    }
}

1 Ответ

0 голосов
/ 28 октября 2019

Было 3 случая использования случайных DLL в программе .NET и наоборот.

  1. это .NET DLL. Здесь нечего делать. Вы всегда можете использовать .NET DLL в. NET Programm. Вы уже делаете это, просто компилируя любой стартовый проект
  2. COM-взаимодействие. Во многих отношениях .NET был продолжением более старого подхода COM. В результате .NET Framework имеет расширенную поддержку COM-взаимодействия .
  3. P / Invoke .

Вариант 2 может работать впроблемы несоответствия бинарности. Вариант 3 почти гарантирован.

Не совсем понятно, является ли ваша программа на C ++ C ++ .NET (сценарий для случая 1) или то, что я называю нативным C ++ (который является любым C ++, кроме .NET). По своему дизайну .NET / MSIL не зависят от исходного языка. То, что .NET определяет больше ограничений, чем язык. Я не могу сказать, был ли System.Xml.Linq.dll написан на C ++ .NET, C #, F # или VB .NET. И мне не нужно знать, чтобы использовать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...