Agregando #pragma make_public (Tipo) no elimina el error C3767
Tengo un ensamblado (A) que define una clase administrada que tiene un constructor público que toma dos tipos nativos.
Tengo acceso a los archivos de encabezado y archivos de compilación que contienen los tipos nativos.
Creé unaC++/CLI
proyecto y definió unref class
que contiene una solapublic: static
método que devuelve un tipo público definido en (A).
Cuando trato de construir al pasar un tipo nativo, recibo el 'C3767' YourType :: TypeB ': las funciones candidatas no son accesibles.
He añadido#pragma make_public(Type)
para los tipos nativos y cualquier tipo del que se deriven, pero que aún no sean alegres.
Mi encabezado de clase:
#pragma once
#include "StdAfx.h"
using namespace System;
using namespace AssemblyA;
namespace NativeWrapper {
ref class MyFactory
{
public:
static AssemblyAType^ Build();
};
}
Mi archivo cpp:
#include "StdAfx.h"
#pragma make_public(nativeObjectRoot)
#pragma make_public(nativeObjectDerived)
#include "MyFactory.h"
using namespace System;
using namespace NativeWrapper;
AssemblyAType^ MyFactory::Build()
{
nativeObjectDerived* myNativeObject;
//myNativeObject initialised and set up here
return gcnew AssemblyAType(myNativeObject); <--C3767
}
He buscado y el tipo administrado 'AssemblyAType' tiene un constructor público con esta firma. Parece que no puede hacer que la pragma funcione ??
Para resumir.
Mi proyecto C ++ / CLI hace referencia a un ensamblado de terceros que define un tipo que toma un tipo nativo en su constructor. Mi proyecto también tiene los archivos de encabezado / lib agregados / vinculados a.
Nota: mi código anterior no es exactamente lo que tengo pero eliminé las partes pertinentes.