C++ 为什么GetProcAddress()不起作用?
我是DLL编程的新手 我已经创建了一个DLL项目 在DLL项目中C++ 为什么GetProcAddress()不起作用?,c++,windows,visual-studio-2010,dll,C++,Windows,Visual Studio 2010,Dll,我是DLL编程的新手 我已经创建了一个DLL项目 在DLL项目中SimpleH.h namespace ME{ class base { public: static __declspec(dllexport) void Hello(); }; } __declspec(dllexport) void HelloWorld(); DLL.cpp #include "stdafx.h" #include <iostream> #incl
SimpleH.h
namespace ME{
class base
{
public:
static __declspec(dllexport) void Hello();
};
}
__declspec(dllexport) void HelloWorld();
DLL.cpp
#include "stdafx.h"
#include <iostream>
#include "SimpleH.h"
using namespace std;
namespace ME
{
void base::Hello()
{
cout << "Hello World\n";
}
}
void HelloWorld()
{
cout << "Hello I am world\n";
}
hInstance正在正确更新。
但是没有更新GetProcAddress()
。
请帮帮我。
哪里出了问题?导出的函数具有“修饰名称”。使用DUMPBIN查看它们
DUMPBIN/导出你的.dll你的函数和方法名是 如果从命令行使用
DUMPBIN/EXPORTS MyDLL.dll
,您将读取一些标识符名称,如:
例如,HelloWorld
实际上被导出为?HelloWorld@@YAXXZ
。因此,GetProcAddress()
无法找到原始标识符。使用外部“C”
以避免在HelloWorld
上出现名称混乱:
extern "C" __declspec(dllexport) void HelloWorld();
更详细地说,从DLL导出C++类的正确方法可以在.< /p>中找到。您可能想读一下.@ LiBiRK可能复制的一些复制品,但是外部“C”技巧对于静态成员函数是行不通的(或者会?)我需要在哪里写?它是在
Propoties
还是在CPP
文件中?在GetProcAddress调用中使用修饰名称。
1 0 00001000 ?Hello@base@ME@@SAXXZ
2 1 00001020 ?HelloWorld@@YAXXZ
extern "C" __declspec(dllexport) void HelloWorld();