DLL смешанного режима C++\CLI

У меня есть собственная библиотека DLL C++, которую я хочу преобразовать в управляемую библиотеку DLL с помощью функции смешанного режима C++\CLI. Я написал код. Компиляция DLL проходит нормально, но компиляция исполняемого файла, использующего DLL, завершается с ошибкой.

ошибка C3767 функция-кандидат (ы) недоступна

относительно функции DLL, которую я хочу экспортировать. Структура кода следующая

// -- DLL Header managedTest.h
namespace managedTest
{
    public ref class managedDLL
    {
    public:
        // -- Native function to export
        void SomeFunction(int a, USER-DEFINED TYPE &b);
    }
}

// -------------------------------------------------------------------------

// -- DLL cpp file managedTest.cpp
#include "managedTest.h"
void managedTest::managedDLL::SomeFunction(int a, USER-DEFINED TYPE &b)
{
     do something;
}

//--------------------------------------------------------------------------

// -- Implementation file that recalls the DLL
using namespace managedTest;
int main(void)
{
     managedDLL^ test = gcnew managedDLL;
     test->SomeFunction(a, b); // -- Here I have the error!
}

Я читал что-то о вызове функции через управляемую-неуправляемую границу, но я все еще не могу найти решение этой проблемы. Я почти уверен, что проблема связана с обнародованием USER-DEFINED TYPE.

Может ли кто-нибудь помочь мне понять, в чем проблема? Заранее спасибо.


person WestWizard    schedule 24.11.2015    source источник
comment
Что такое ПОЛЬЗОВАТЕЛЬСКИЙ ТИП? Структура? Класс? Определение типа?   -  person David Yaw    schedule 24.11.2015
comment
Судя по звуку, это не общедоступный управляемый тип. Поэтому его нельзя экспортировать с помощью метаданных .NET. Что делает открытый метод недоступным. #pragma make_public может быть обходным путем, но не часто, также заверните его..   -  person Hans Passant    schedule 24.11.2015
comment
@DavidYaw ПОЛЬЗОВАТЕЛЬСКИЙ ТИП - это структура.   -  person WestWizard    schedule 24.11.2015
comment
@HansPassant Я уже пробовал ваше предложение о #pragma, но это не решило проблему. Нет ли другого пути решения проблемы, либо изменения структуры программы?   -  person WestWizard    schedule 24.11.2015
comment
Пожалуйста, покажите фактическое определение структуры. Для этого необходимо объявить структуру общедоступного значения и ни один из открытых членов не может быть стандартным классом C++.   -  person crashmstr    schedule 24.11.2015
comment
Зачем нужно менять структуру программы? Объявление public value class для переноса нативной структуры ничем не отличается от объявления public ref class для переноса нативного класса/функций.   -  person Hans Passant    schedule 24.11.2015