来自 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++中打印指向不同基元数据类型的指针的内存地址
- 如何使用非类型模板参数传入指向数组的指针
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 表观调用前面的表达式必须具有指向 func 类型的指针
- C++ - 声明指向返回任何类型并获取任意数量参数的函数的指针
- 为什么"具有常量成员的结构"类型的指针不能指向"具有非常量成员的结构"?
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 指向(数据)成员的指针作为非类型模板参数,例如具有自动存储持续时间/无链接
- 如何为非类型模板声明指向对象的指针?
- 指向 POD 类型的指针之间的静态转换与重新解释转换
- 使用智能指针指向 C 库中的结构,该结构通过 typedef 隐藏实现(即不完整的类型)
- 指向成员的指针类型和模板
- 迭代时将指向differents类型的指针保存在std::向量中
- 对于多态类型T,如何在没有类型T实例的情况下获得指向T的虚拟表的指针
- 用于将 void 指针强制转换为指向类型的指针的操作的术语是什么
- 指向类型名成员的指针
- 指向类型强制转换和取消引用指针的指针
- c++的类型转换结构指针指向类型值