家伙!我以某种方式找到了一个更易于理解的关于C语言中的DLL的教程,但现在我似乎无法摆脱这个问题。
我创建了这个使用DLL的简单程序。我打算在DLL中调用一个名为“HelloWorld()”的函数,看看它是否会出现我想要的。
“dllmain.c”
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
DLLIMPORT void HelloWorld()
{
printf("HAI!");
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
{
break;
}
case DLL_PROCESS_DETACH:
{
break;
}
case DLL_THREAD_ATTACH:
{
break;
}
case DLL_THREAD_DETACH:
{
break;
}
}
/* Return TRUE on success, FALSE on failure */
return TRUE;
}
“dll.h”
#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
#define DLLIMPORT __declspec(dllexport)
#else
#define DLLIMPORT __declspec(dllimport)
#endif
DLLIMPORT void HelloWorld();
#endif
“main.c”(可执行文件)
#include <stdio.h>
#include <stdlib.h>
#include "dll.h"
#include <windows.h>
main()
{
HelloWorld();
getch();
}
这是问题所在:
错误消息 {C:... \文档\ DLLTest \ main.o
main.c:(.text+0x10): undefined reference to `__imp_HelloWorld'}
{C:\...\Documents\DLLTest\collect2.exe [Error] ld returned 1 exit status
Can someone tell me why this appears?! Thanks in advance!}
哦,顺便说一句,这是用DevC ++ TDM-GCC 4.7.1 64位版本制作的
答案 0 :(得分:0)
您需要将已编译的dll库(* .lib或类似的东西)添加到项目中
单击项目 - &gt;“项目选项” - &gt;“参数”和链接器添加库
部分答案 1 :(得分:0)
您需要使用main.c
编译-L. -ldllmain
(.
表示DLL所在的当前目录)。例如,我在当前目录中有这些文件:
> dir
...
01/18/2014 05:53 PM <DIR> .
01/18/2014 05:53 PM <DIR> ..
01/18/2014 05:48 PM 191 dll.h
01/18/2014 05:49 PM 615 dllmain.c
01/18/2014 05:50 PM 150 main.c
...
>
编译DLL然后编译main.c
并将其与dllmain.dll
链接:
> gcc -Wall dllmain.c -shared -o dllmain.dll
> gcc -Wall main.c -L. -ldllmain
现在你很高兴:
> dir
...
01/18/2014 05:53 PM 29,141 a.exe
01/18/2014 05:48 PM 191 dll.h
01/18/2014 05:49 PM 615 dllmain.c
01/18/2014 05:53 PM 26,466 dllmain.dll
01/18/2014 05:50 PM 150 main.c
...
> a.exe
HAI!
>