У меня есть собственная библиотека 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.
Может ли кто-нибудь помочь мне понять, в чем проблема? Заранее спасибо.
#pragma make_public
может быть обходным путем, но не часто, также заверните его.. - person Hans Passant   schedule 24.11.2015public value class
для переноса нативной структуры ничем не отличается от объявленияpublic ref class
для переноса нативного класса/функций. - person Hans Passant   schedule 24.11.2015