gpt4 book ai didi

c++ - LibVLC 访问冲突

转载 作者:太空宇宙 更新时间:2023-11-04 13:31:22 29 4
gpt4 key购买 nike

我正在尝试在 LibVLC 中设置日志记录,但遇到了一些问题。

我使用的函数是libvlc_log_set_file,文档如下: LibVLC logging docs

这是我现在的代码:

//header
private:
FILE * logFile;

//source
logFile = fopen(path.c_str(), "w");
if(logFile != NULL)
{
libvlc_log_set_file(_libvlc_instance, logFile);
}

libvlc_log_set_file 行我收到此错误,“nw.exe 中 0x77559E33 (ntdll.dll) 处未处理的异常:0xC0000005:访问冲突写入位置 0x00000014。”

我可以使用 fputs() 打开文件并写入文件。

我在 64 位 Windows 7 机器上使用 NW.js 和 WebChimera.js 编译为 32 位 Visual Studio 2013。

有什么想法吗?

最佳答案

我今天遇到了这个问题。我无法使用 libvlc_log_set_file 解决它。相反,我选择使用 libvlc_log_set 来设置回调并使用该方法写入日志文件。这是一个例子,它显示了需要做什么。我不推荐全局文件指针,它只是为了这个快速示例。

注意:logpath 是一个包含日志文件路径的 const char*。此外,您可能希望 flockfile 使该线程安全。您还可以在其中添加一个 switch 语句来处理 LIBVLC_NOTICE、LIBVLC_ERROR、LIBVLC_WARNING 和 LIBVLC_DEBUG 的级别参数,从而使您的日志记录具有一定的粒度。

bool g_loggingEnabled = true;
FILE* g_logfp = nullptr;

void logcb(void *data, int level, const libvlc_log_t *ctx, const char *fmt, va_list args)
{
if (!g_loggingEnabled) return;

if (g_logfp == nullptr)
{
errno_t err = fopen_s(&g_logfp, logpath, "w");

if (err != 0)
{
g_loggingEnabled = false;
return;
}
}

vfprintf(g_logfp, fmt, args);
}

附录:在 Windows 上,您可能希望使用设置了 FILE_SHARE_READ 标志的 CreateFile,并使用 WriteFile,以便外部文本编辑器可以在实时记录时查看文件。如果这样做,请查看 vsprintf_s 而不是 vfprintf 来填充一个字符缓冲区,然后您将在 logcb 方法中将其传递给 WriteFile。

关于c++ - LibVLC 访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31334594/

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