Ho un progetto C++ (visual studio 2010) che comprende anche codice nativo e codice C++/cli. Non riesco a compilare l'intero progetto con/clr, quindi lo faccio solo per i rispettivi file C++/cli. Il mio problema è che un file di intestazione non può essere compilato con/clr, ma voglio rendere alcune funzioni C++/cli riutilizzabili all'interno dell'intero progetto e quindi definire i prototipi di metodo in un file di intestazione per includerlo in ogni file in cui ho bisogno. C'è una soluzione? Ho provato a definire alcuni prototipi di metodi a codice misto in un file di intestazione, ma/clr deve essere acceso per poterlo compilare.file di intestazione dell'interfaccia C++/cli
Ecco il mio esempio:
Test.h
#include <Windows.h>
#include <vector>
#include <string>
using std::vector;
using std::string;
#include <msclr/marshal.h>
#pragma managed
using namespace msclr::interop;
using namespace System;
using namespace System::IO;
using namespace System::Runtime::InteropServices;
public ref class Test
{
public:
int Foo();
};
Test.cpp
#include "Test.h"
int Test::Foo()
{
return 4;
}
Intellisense si lamenta di errori in Test.h come C++/CLI deve essere abilitato per usa #using. Ma penso che sia trascurabile e si compilerebbe comunque.
compilazione si interrompe con un errore di linker (SRY, ho tedesco versione VS)
Fehler 6 error LNK1255: Fehler bei Verknüpfung aufgrund von Metadatenfehlern.
Fehler 4 error LNK2022: Fehler bei Metadatenoperation (8013118D) : Duplizierte Typen (_PROPSHEETPAGEA) wurden gefunden, aber die Typenlayoutinformationen sind nicht konsistent: (0x02000198).
Fehler 5 error LNK2022: Fehler bei Metadatenoperation (8013118D) : Duplizierte Typen (_PROPSHEETPAGEW) wurden gefunden, aber die Typenlayoutinformationen sind nicht konsistent: (0x020001d1).
io non sicuramente avere una classe duplicato "Test" altrove, quindi non so dove il duplicato viene. Che cosa sono le informazioni di tipelayout e perché non sono coerenti?
Come è possibile compilare parte del progetto con/clr e parte senza? E perché il tuo codice nativo non funziona con/clr? – svick
È un plugin per 3dsMax e la compilazione dell'intero progetto con/clr non funziona, ho ricevuto molti errori. Il metodo consigliato da Autodesk è di compilare solo le parti di codice C++/cli con/clr on. Per ogni file .cpp è possibile impostare "Usa Common Language Runtime" nelle proprietà. – Michbeckable
Potresti pubblicare un breve esempio di un file di intestazione e usare il file cpp che non verrebbe compilato? Inoltre, il file di intestazione viene utilizzato sia da a/clr cpp sia da un non-/ clr cpp? –