我對DLL編程有相當新手。爲什麼GetProcAddress()不工作?
我創建了一個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";
}
我已經創建了一個.exe
。
Main.exe
#include "stdafx.h"
#include <stdlib.h>
#include <Windows.h>
#include <iostream>
using namespace std;
typedef void (*FunctionFunc)();
typedef void (*FunctionAno)();
int _tmain(int argc, _TCHAR* argv[])
{
FunctionFunc _FunctionFunc;
FunctionAno _FunctionAno;
HINSTANCE hInstLibrary = LoadLibrary(L"MyDLL.dll");
if(hInstLibrary)
{
/*Problem Happens here*/
_FunctionFunc = (FunctionFunc)GetProcAddress(hInstLibrary, "Hello");
_FunctionAno = (FunctionFunc)GetProcAddress(hInstLibrary, "HelloWorld");
/**/
if(_FunctionFunc)
{
_FunctionFunc();
}
if(_FunctionAno)
{
_FunctionAno();
}
DWORD error = ::GetLastError();
if (error)
{
LPVOID lpMsgBuf;
LPVOID lpDisplayBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
error,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL);
}
}
FreeLibrary(hInstLibrary);
system("pause");
return 0;
}
的hInstance是越來越正確更新。 但GetProcAddress()
沒有得到更新。 請幫幫我。 哪裏出問題了?
您可能想閱讀[C++中的名稱修飾](http://en.wikipedia.org/wiki/Name_mangling#Name_mangling_in_C.2B.2B)。 –
[GetProcAddress可能找不到我的函數](http://stackoverflow.com/questions/2601908/getprocaddress-cannot-find-my-functions) – librik
@librik某種重複,但外部「C」技巧贏得不工作的靜態成員函數(或將?) – manuell