我有一个 Assembly(A),它定义了一个托管类,该类具有一个采用两种本机类型的公共构造函数。
我可以访问包含本机类型的头文件和编译的 lib 文件。
我创建了一个C++/CLI
项目并定义了ref class
其中包含一个public: static
返回 (A) 中定义的公共类型的方法。
当我尝试通过传入本机类型进行构造时,我收到“C3767 'Your Type::Type B':候选函数不可访问”。
我已经添加#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 文件。
注意:我上面的代码并不完全是我所得到的,但我已经删除了相关部分。