0

这似乎是一个菜鸟问题,但我所有的搜索都返回了关于C++ or C#所以我要在这里问的东西。

我的 .c 文件目录中有一个DLL, SDL.dll, 。我想导入它来使用。不支持使用,#import不起作用。

4

3 回答 3

1

源代码中没有任何指令可以帮助您,您也可以

  • 链接到 DLL,为此使用所谓的 lib 文件。(这是一个静态动态链接)
  • 使用 LoadLibrary/FreeLibrary 和 GetProcAddress 将函数的地址映射到函数指针(真正的动态链接)

在第一种情况下,您还需要一个与所用 DLL 的平台和版本相匹配的适当头文件。

如果您插入更新版本的 DLL,只要使用的函数的原型匹配,第二种解决方案将起作用。

这假设您在 Windows 下,如果您有 *.dll 而不是 *.so(共享对象)文件,则可能是这种情况。(对于 Linux 系统,您可以包含dlfcn.h并使用 dlopen/dlclose/dlsym 而不是 LoadLibrary/FreeLibrary/GetProcAddress,但语法略有不同,请查看文档)

于 2013-03-23T22:36:08.390 回答
0

Assuming you're using Visual Studio.

1.) Download  http://www.libsdl.org/release/SDL-1.2.15.zip
2.) unzip and install to for example C:\SDL-1.2.15
3.) In Visual Studio open the properties of the project goto C++ general and add C:\SDL-1.2.15\include to "Additional include directories".
4.) Goto the "Linker" tab and add C:\SDL-1.2.15\lib\x86 to "Additional library directories".
5.) Now go to "Input" under the Linker tab and add SDL.lib; SDLmain.lib to "Additional dependencies"
6.) Go to the "Build Events" tab and "Post build event" and add copy /y C:\SDL-1.2.15\lib\x86\SDL.dll "$(OutDir)

That should do get your SDL working for Visual Studio in 32bit

On Linux if SDL is already installed just type "g++ -02 -o foo foo.cpp -lSDL"

于 2013-03-25T09:13:10.623 回答
0

假设您的 DLL 格式正确(例如与 Windows API DLL 相同的标准),这很有可能

你需要声明你的函数——也许在一个头文件中,像这样:

typedef void (CALLBACK *functionnameptr)(char *, int),

然后使用 LoadLibrary 加载 DLL,并为其提供句柄:

句柄 = LoadLibrary("SDL.DLL");

然后你使用 GetProcAddress(handle,"real function name in DLL") 像这样:

函数名 lptr 函数;

lptrfunction = GetProcAddress(handle,"DLL 中的真实函数名");

现在您可以像通常在 C 中使用函数一样使用 lptrfunction

于 2013-03-23T22:40:47.260 回答