我如何在VC&x2B中定义HAVE STDIO+;2005? 我刚刚建立了一个更新版本的SDLDLL,一个开源的DLL,我的Delphi项目使用的是Visual C++ 2005的Express版本。我将其与我的EXE一起放入文件夹并尝试运行,但无法加载: The procedure entry point SDL_RWFromFP could not be located in the dynamic link library SDL.dll.

我如何在VC&x2B中定义HAVE STDIO+;2005? 我刚刚建立了一个更新版本的SDLDLL,一个开源的DLL,我的Delphi项目使用的是Visual C++ 2005的Express版本。我将其与我的EXE一起放入文件夹并尝试运行,但无法加载: The procedure entry point SDL_RWFromFP could not be located in the dynamic link library SDL.dll.,c,visual-c++,C,Visual C++,C从来都不是我的强项,但我在大学里记得足够多,所以我试着找出这个。我仔细查看了源代码,看看这个函数发生了什么,发现它在一个预处理器指令下变灰了: #ifdef HAVE_STDIO_H IIRC,STDIO是标准的C I/O库。我想这意味着它不可用。有人知道为什么会这样以及如何解决吗?这是VisualC++问题还是SDL问题? < P>上面的预处理器指令是什么? 最有可能的是,这只是为了确定编译器的某些属性,它会变灰,因为无论宏表示什么,都不适用于编译器 你的问题很可能在别处 由于它找不到函数

C从来都不是我的强项,但我在大学里记得足够多,所以我试着找出这个。我仔细查看了源代码,看看这个函数发生了什么,发现它在一个预处理器指令下变灰了:

#ifdef HAVE_STDIO_H

IIRC,STDIO是标准的C I/O库。我想这意味着它不可用。有人知道为什么会这样以及如何解决吗?这是VisualC++问题还是SDL问题?

< P>上面的预处理器指令是什么?

最有可能的是,这只是为了确定编译器的某些属性,它会变灰,因为无论宏表示什么,都不适用于编译器

你的问题很可能在别处

由于它找不到函数
SDL\u RWFromFP
,因此您可能还应该查看该函数是否因某种原因被预处理器指令禁用

但是,我猜想该函数存在,但没有标记为uu declspec(dllexport)


否则,它将不会公开,因此加载DLL的程序可以调用它。很可能您必须定义一些东西来指定您要创建的DLL,这将使必要的预处理器魔法能够在函数前面插入dllexport部分。

在Unix/Linux世界中,像
这样的名称通常表示代码已“自动配置”(这是一个官方术语,用于描述与“自动工具”(如“autoconf”)一起工作的状态)。在这样的设置中,配置过程将确定
是否可用,并在它生成的
config.H
文件中设置
\define HAVE STDIO\u h1
。然后编译将发现平台具有
,并编译匹配的代码(当前灰显的内容)

适应您的Windows环境,由于在Windows上使用
的STDIO\u H
可能还有其他意义,您可能会决定在运行编译器时在命令行选项中包含
-DHAVE\u STDIO\u H
,也可以手动创建配置文件并定义e
-DHAVE_CONFIG_H
(这是表示配置设置在文件'CONFIG.H'中的正常方式)。在'CONFIG.H'文件中,您将有如上所述的定义have_STDIO_H 1


注意:在Unix上,您通常会发现一个名为“configure”的shell脚本,您可以运行该脚本来创建config.h文件。如果您有Cygwin,那么您就有可能在Windows上使用该脚本-我刚刚检查了我在Solaris上创建的自动配置包是否可以在Cygwin下的Windows上配置,并且它大部分都可以工作-除了ome网络处理。我不能保证它总是会失败(但这是软件——保证任何事情都是非常危险的)。我应该补充一点,问题出在我的自动配置代码中(网络功能的测试显然不太正确),而不是Cygwin本身。如果我正确地完成了这项工作,它就会工作。(有人说“没有可移植代码;只有已移植的代码”。这在这里适用。)


您确实需要对Unix环境进行良好的模拟。MingW可能也可以工作。

通常,您不必添加任何have_STDIO____H:无论如何,它们并不意味着是公共的(尽管遗憾的是,许多项目会用它们污染公共名称空间)


我猜您没有正确构建SDL,或者VisualStudio2005没有得到SDL的很好支持(我对SDL了解不多,所以这些都是没有太多信息的胡乱猜测)。是否有SDL的测试套件,例如您可以测试构建的dll?

请确认您已按照SDL源文件中的VisualC.html解压并使用VisualC.zip。这两个文件都可以在SDL源文件中找到。什么VisualC.zip?您必须查看与我不同的归档文件。我有VisualC.html,但没有VisualC.zip,也没有在html中对它的引用。我是使用SDL1.3代码的最新快照。