Добавление #pragma make_public (Type) не удаляет ошибку C3767
У меня есть сборка (A), которая определяет класс Managed, который имеет открытый конструктор, который принимает два нативных типа.
У меня есть доступ к файлам заголовков и скомпилированных файлов lib, которые содержат нативные типы.
Я создалC++/CLI
проект и определилref class
который содержит одинpublic: static
метод, который возвращает открытый тип, определенный в (A).
Когда я пытаюсь создать структуру путем передачи нативного типа, я получаю `C3767 'YourType :: TypeB': функции-кандидаты, которые недоступны.
я добавил#pragma make_public(Type)
для нативных типов и любого типа, от которого они происходят, но все еще не радость.
Мой заголовок класса:
#pragma once
#include "StdAfx.h"
using namespace System;
using namespace AssemblyA;
namespace NativeWrapper {
ref class MyFactory
{
public:
static AssemblyAType^ Build();
};
}
Мой файл 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
}
Я посмотрел, и у управляемого типа AssemblyAType есть открытый конструктор с этой подписью. Не могу заставить прагму работать ??
Итак, подведем итог.
Мой проект C ++ / CLI ссылается на стороннюю сборку, которая определяет тип, который принимает собственный тип в своем конструкторе. Мой проект также имеет добавленные / связанные файлы заголовка / lib.
Примечание: мой код выше не совсем то, что у меня есть, но я удалил соответствующие части.