У меня есть ассемблер (A), который определяет класс Managed, имеющий открытый конструктор, который принимает два собственных типа.
У меня есть доступ к файлам заголовков и скомпилированным файлам lib, которые содержат собственные типы.
Я создал проект C++/CLI
и определил ref class
, который содержит один метод public: static
, который возвращает открытый тип, определенный в (A).
Когда я пытаюсь создать структуру, передавв нативном типе я получаю `C3767 'YourType :: TypeB': функции (и) кандидата, недоступные.
Я добавил #pragma make_public(Type)
для нативных типов и любого типа, от которого они происходят, но все еще нетjoy.
Мой заголовок класса:
#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.
Примечание: мой код выше не совсем то, что у меня есть, но я удалил соответствующие части.