вызов функции из dll [выражение, предшествующее круглым скобкам видимого вызова, должно иметь (указатель на) тип функции] - PullRequest
0 голосов
/ 23 октября 2018

Я совершенно новичок в c ++ и пытаюсь создать образец dll и клиент, который вызывает функцию из dll.

Я создал решение с VC ++ и двумя проектами внутри одной библиотеки DLL и одной консоли.

Внутри проекта plugin_dll у меня есть заголовок и файл cpp:

plugin.h    
    #pragma once
    #define EXPORT extern "C" __declspec (dllexport)
    EXPORT char const* Greetings();

plugin.cpp
    #include "stdafx.h"
    #include "plugin.h"

    char const * Greetings()
    {
        return "Hello From  Plugin";
    }

в проекте консольного приложения у меня

#include "pch.h"
#include "stdafx.h"
#include <iostream>

using namespace std;
int main()
{

    HMODULE DllHandler = ::LoadLibrary(L"plugin.dll");
    char const* const getGreetings=reinterpret_cast<char const*>(::GetProcAddress(DllHandler, "Greetings"));
    cout << getGreetings() << endl; // Here I get the Error
    cin.get();
 }

в строке cout я получаю ошибку

E0109   expression preceding parentheses of apparent call must have (pointer-to-) function 

и ошибку времени компиляции

C2064   term does not evaluate to a function taking 0 arguments 

Во-первых,Это правильный подход для создания функции экспорта DLL и вызова ее в клиентском приложении?Это правильный подход к решению проблемы?

1 Ответ

0 голосов
/ 23 октября 2018

getGreetings - это const char*, а не функция, вам нужно использовать reinterpret_cast<const char*(*)()>(), чтобы сделать ее функцией, а не переменной.

...