gpt4 book ai didi

c - DLL 的问题

转载 作者:行者123 更新时间:2023-11-30 17:41:12 24 4
gpt4 key购买 nike

伙计们!我不知何故找到了一个更容易理解的关于 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:...\Documents\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 位版本制作的

最佳答案

您需要使用-L编译main.c。 -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!
>

关于c - DLL 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21205487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com