是否可以通过GCC编译使用.NET DLL的C ++?

时间:2019-10-28 11:55:53

标签: c# c++ .net gcc

我想在C ++项目中使用AML.Engine.dll(https://github.com/AutomationML/AMLEngine2.1)。我已经将它与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 :(得分:0)

在.NET程序中使用随机dll有3种,反之亦然。

  1. 这是一个.NET DLL。这里没有事可做。您始终可以在.NET程序中使用.NET dll。您已经在编译任何启动项目就已经完成了
  2. COM互操作。在许多方面,.NET是旧版COM方法的后续版本。结果,.NET Framework具有extensive COM Interop support
  3. P/Invoke

选项2可能会遇到二进制不匹配问题。选项3几乎可以保证。

目前还不清楚您的C ++程序是C ++ .NET(一种情况1)还是我所说的本机C ++(除.NET以外,其他任何C ++)都不清楚。根据设计,.NET / MSIL与源语言无关。 .NET比该语言定义了更多有关限制的信息。 我不知道System.Xml.Linq.dll是用C ++ .NET,C#,F#还是VB .NET编写的。而且我不需要知道使用它。