gpt4 book ai didi

c++ - 返回类型不正确

转载 作者:行者123 更新时间:2023-11-28 01:35:29 24 4
gpt4 key购买 nike

类型定义:

typedef int (*vlc_media_player_is_playing(libvlc_media_player_t*));

该类定义了一个具有这种类型的字段。该字段填充了 dll 中函数的地址。当您尝试调用函数时,将返回 int* 指针而不是 int。为什么会这样?

因此,指针中的数据是正确的。

When you try to dereference the pointer, the program crashes.

我还将添加这种类型的示例:

typedef struct libvlc_instance_t libvlc_instance_t;
typedef libvlc_instance_t(*vlc_create_instance(int, const char* const*));

不知何故,同样,立即返回一个指针。

class Foo
{
...
private:
vlc_media_player_is_playing* libvlc_media_player_is_playing = nullptr;
...
public:
Foo()
{
libvlc_media_player_is_playing = (vlc_media_player_is_playing*)GetSomeAddress("SomeFuncName");
}

void call()
{
// but this is not `int`
int result = libvlc_media_player_is_playing(player_ptr);
}
}

最佳答案

vlc_media_player_is_playing 是指向函数指针的别名,该函数返回整数并接受指向 libvlc_media_player_t 结构的指针。

所以这种类型的任何用法都被认为是指向函数的指针,例如:

vlc_media_player_is_playing myFunc = SomeFuncReturningIntTakingVlc;

通过指针调用函数eg:

int ret = (*myFunc)(libvlc_media_player_tParam);

但是你在这里创建了一个指向函数指针的指针:

 vlc_media_player_is_playing* libvlc_media_player_is_playing = nullptr;

所以去掉上面的指针运算符,让它看起来像:

vlc_media_player_is_playing libvlc_media_player_is_playing = nullptr;

稍后在函数 call 中调用该函数:

int result = (*libvlc_media_player_is_playing)(player_ptr);

关于c++ - 返回类型不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49459484/

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