Я тестирую простую DLL, написанную на C ++ / CLI, в консольном приложении CLR. В DLL есть только одна функция, которую я пытаюсь использовать. Я ссылаюсь на DLL и устанавливаю ссылку Resolve #using на странице свойств проекта, но не вижу написанную мной функцию. Наверное, я где-то пропустил модификатор доступа, но я не уверен. Вот код моего кода:
Заголовок кода DLL:
// LogDLL.h
#pragma once
#using <mscorlib.dll>
using namespace System;
namespace LogDLL {
public ref class LogFuncs
{
// TODO: Add your methods for this class here.
LogFuncs(){;};
~LogFuncs(){;};
void log_to_file ( System::String ^file, bool overwrite, System::String ^text );
};
}
Код источника DLL:
#include "stdafx.h"
#include "LogDLL.h"
using namespace System::Globalization;
void LogDLL::LogFuncs::log_to_file ( System::String ^file, bool overwrite, System::String ^text )
{
//Do Stuff
}
И тестовый код, который я использую:
#include "stdafx.h"
#using <LogDLL.dll>
using namespace System;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
LogDLL::LogFuncs^ a;
a::LogDLL::LogFuncs:: //<-- Intellisense doesn't show the function from the DLL
return 0;
}
Опять же, я не уверен, что мне не хватает. Прошло немного времени с тех пор, как я работал с C ++ / CLI, поэтому я довольно ржавый.
UPDATE:
Я пошел дальше и изменил класс на структуру по совету Питера.
Модифицированный код заголовка DLL:
// LogDLL.h
#pragma once
#using <mscorlib.dll>
using namespace System;
namespace LogDLL {
public ref struct LogFuncs
{
// TODO: Add your methods for this class here.
LogFuncs(){;};
~LogFuncs(){;};
void log_to_file ( System::String ^file, bool overwrite, System::String ^text );
};
}
Чего я до сих пор не понимаю, так это того, почему класс по умолчанию будет закрытым, хотя я указываю его как открытый Есть ли фундаментальная причина, почему это так? Было бы по-другому, если бы я использовал неуправляемый C ++ ??