Не вижу мою функцию DLL в тестовом приложении - PullRequest
1 голос
/ 25 февраля 2011

Я тестирую простую 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 ++ ??

1 Ответ

2 голосов
/ 25 февраля 2011

Доступ по умолчанию для класса является закрытым.Либо добавьте «public:» для участников, которые вы хотите стать публичными, либо измените на структуру ref, которая имеет доступ по умолчанию public.

Что касается IntelliSense, я предполагаю, что вы используете Visual Studio 2005или Visual Studio 2008;Visual Studio 2010 не поддерживает код IntelliSense для C ++ / CLI (это связано с тем, что синтаксический анализатор был заменен на EDG, и они не модифицировали возможности синтаксического анализа в C ++ / CLI для выпуска 2010 г.).

Я сомневаюсь в IntelliSenseбудет автоматически завершать с синтаксисом, который вы используете в любом случае.Вместо этого вы хотели бы использовать «a->» (конечно, перед запуском этого кода, gcnew это).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...