C++ 为什么GetProcAddress()不起作用?

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

我是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>
#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();