Indy 客户端 TIdHTTP 导致错误 ws2tcpip.h(817):对“memcpy”的调用不明确

问题描述 投票:0回答:1

我正在将 C++Builder 11 用于 64 位 VCL Windows 应用程序。我的程序使用名为 FlexCompress 的第 3 方组件,该组件在机器生成的标头

memcpy
文件中列出了名为
.hpp
的函数。

当我将 Indy 组件

TIdHTTP
(版本 10.6.2.0)添加到我的应用程序时,出现此错误:

[bcc64 Error] ws2tcpip.h(817): call to 'memcpy' is ambiguous
 mem.h(58): candidate function
 FXCZLib.hpp(150): candidate function

此文件位于文件

ws2tcpip.h(817)
中,错误下方列出了具有名为
memcpy
的函数的两个文件。

问题是我不相信我可以安全地修改这些头文件中的任何一个。有什么解决办法吗?

在文件中

ws2tcpip.h

    if (Error == 0) {
        if (*SourceCount > 0) {
            CopyMemory(SourceList, Filter->imsf_slist,
                       *SourceCount * sizeof(*SourceList));
            *SourceCount = Filter->imsf_numsrc;
        }
        *FilterMode = Filter->imsf_fmode;
    }

在文件中

FXCZLib.hpp

extern DELPHI_PACKAGE void __cdecl memcpy(void * dest, void * Source, int Count);

在文件中

mem.h

void _FAR * _RTLENTRY  _EXPFUNC memcpy(void _FAR *__dest, const void _FAR *__src, _SIZE_T __n);

我没有尝试任何东西,因为我害怕修改这些头文件。

c++builder indy memcpy
1个回答
0
投票

问题不在于印地本身。

ws2tcpip.h
是一个标准的Microsoft头文件,它有一些调用
CopyMemory()
的内联函数,它只是
memcpy()
的别名。该错误是因为作用域中有多个来自不同来源的
memcpy()
声明,一个来自 C 运行时,一个来自 FlexCompress,并且编译器不知道使用哪一个。这与印地无关。 FlexCompress 一开始就不应该重新声明
memcpy()
。这是你应该与它的作者讨论的事情。

同时,您应该尝试重新排序您的头文件包含内容,以便 FlexCompress 的标头出现在 Indy 的标头之后。或者,尝试将 FlexCompress 和 Indy 分开,这样它们就不会在同一源单元中一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.