2017-06-11 10 views
-2

J'ai une structure définie en Managed.h et j'aimerais pouvoir l'utiliser dans un projet différent, qui est un C++ non géré (appelons-le Unmanaged.h).Comment utiliser une structure définie dans C++ CLR dans un C++ non géré?

J'ai essayé de référencer la DLL, quelques #include s différents, mais je ne pouvais pas le faire fonctionner. Y a-t-il un moyen simple de le faire?

Pour plus d'informations: Je suis tout à fait nouveau pour C++ programmation (je fais C# en général), et j'utilise Visual Studio 2015.

+0

comprennent le fichier .h indiquant le chemin d'accès dans l'en-tête à double quites _ « » _ –

Répondre

1

Il serait utile de voir le code et le message d'erreur que vous voyez. Mais à titre d'exemple de base:

  1. Fichier CLR contenant la structure. Appelez-le MyStruct.h:

using namespace System; 

namespace ManagedNameSpace { 

    public value struct MyStruct { 
     void f() { 
      System::Console::WriteLine("test"); 
     } 
    }; 
} 
  1. La classe non géré comprend la struct CLR et comme un exemple explicite que j'ai appelé l'objet dans le constructeur, mais vous pouvez déplacer facilement ce à un fichier de mise en œuvre (Rappelez-vous d'inclure le fichier dans l'en-tête):

#include "MyStruct.h" 

class UnManagedClass { 
    public: 
     explicit UnManagedClass() { 
      ManagedNameSpace::MyStruct clrObj; 
      clrObj.f(); 
      std::cout << "This compiles fine"; 
     } 
}; 

Prenez note que certains types de CLR nécessitent un tri. Par exemple, la chaîne devra être rassemblée. Voici un exemple de conversion d'une chaîne à LPCWSTR

LPCWSTR lpcwStr = (LPCWSTR)(Marshal::StringToHGlobalUni(clrString)).ToPointer()