来自 dll 的函数调用 [表观调用括号前的表达式必须具有(指向)函数类型]
function call from dll [expression preceding parentheses of apparent call must have (pointer-to-) function type]
我是 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 导出函数并在客户端应用程序中调用它的正确方法吗?这是解决错误的正确方法吗?
getGreetings
是一个 const char*
,不是一个函数,你想要的是使用 reinterpret_cast<const char*(*)()>()
而不是一个函数而不是一个变量。
我是 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 导出函数并在客户端应用程序中调用它的正确方法吗?这是解决错误的正确方法吗?
getGreetings
是一个 const char*
,不是一个函数,你想要的是使用 reinterpret_cast<const char*(*)()>()
而不是一个函数而不是一个变量。