DLL的问题

时间:2014-01-18 14:34:58

标签: c dll

家伙!我以某种方式找到了一个更易于理解的关于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位版本制作的

2 个答案:

答案 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!
>