我想要一个从C++ windows DLL导出函数的简单示例.
我想看看标题,cpp文件和def文件(如果绝对需要).
我希望导出的名称不加修饰.我想使用最标准的调用约定(__stdcall?).我想使用__declspec(dllexport)而不必使用DEF文件.
例如:
//header
extern "C"
{
__declspec(dllexport) int __stdcall foo(long bar);
}
//cpp
int __stdcall foo(long bar)
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我试图避免链接器为名称添加下划线和/或数字(字节数?).
我没有支持使用相同标头的dllimport和dllexport.我不想要任何有关导出C++类方法的信息,只需要c风格的全局函数.
UPDATE
不包括调用约定(并使用extern"C")给出了我喜欢的导出名称,但这意味着什么?是什么默认调用约定我得到什么pinvoke(.NET),声明(vb6)和GetProcAddress会期望?(我猜对于GetProcAddress,它将取决于调用者创建的函数指针).
我希望在没有头文件的情况下使用这个DLL,所以我真的不需要很多花哨的#defines来使调用者可以使用头文件.
我的回答是我必须使用DEF文件.
如何在C++中导入DLL(minifmod.dll)?
我希望能够在这个DLL中调用一个函数.我已经知道函数的参数列表,但我不知道如何调用它.
有没有办法在C++中声明导入的函数,就像在C#中一样?
我创建了一个DLL文件(helloWorld.dll):
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#define DLL_FUNC extern "C" __declspec(dllexport)
DLL_FUNC int __stdcall Hello() {
MessageBox(HWND_DESKTOP, "Hello, world", "MEssage", MB_OK);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
之后我创建了一个我要调用的cpp(useDLL.cpp)
#include <windows.h>
#include <stdio.h>
int main () {
typedef void (*pfunc)();
HINSTANCE hdll = LoadLibrary("HelloWorld.dll");
pfunc Hello;
Hello = (pfunc)GetProcAddress(hdll, "hello");
Hello();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如何调用Hello()函数?