我一直在试图创建一个DLL并将DLL链接到我的程序,但每次我尝试我的程序都找不到该函数。该DLL加载正常,但功能无法找到。动态链接C++ DLL ...我做错了什么?
计划:
#include <iostream>
#include <windows.h>
using namespace std;
typedef void (*HelloPtr)();
int main() {
HelloPtr hello;
HINSTANCE hDll = LoadLibrary("dll.dll");
if(hDll)
{
hello = (HelloPtr)GetProcAddress(hDll, "hello");
if(hello) {
hello();
} else {
// Error code here
}
}
return 0;
}
dllmain.cpp
#include "dll.h"
#include <windows.h>
DLLIMPORT void hello()
{
MessageBox(NULL, "Hey", "", MB_OK);
}
DllClass::DllClass()
{
}
DllClass::~DllClass()
{
}
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */)
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
/* Returns TRUE on success, FALSE on failure */
return TRUE;
}
dll.h
#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport) void hello(void)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllexport) void hello(void)
#endif /* Not BUILDING_DLL */
class DLLIMPORT DllClass
{
public:
DllClass();
virtual ~DllClass(void);
// Says hello world
DLLImport void hello(void);
private:
};
#endif /* _DLL_H_ */
我想知道我做错了什么,所以我可以将其记录下来并学习。
感谢
我不认为可以编译:`class DLLIMPORT DllClass`会展开成`class __declspec(dllexport)void hello(void)DllClass`。 – 2010-11-28 11:11:58
当你不在类中放置`void hello(void)`,并在其周围添加`extern“C”{}`块时会发生什么? – stakx 2010-11-28 11:12:53