首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LibVLC访问冲突

LibVLC访问冲突
EN

Stack Overflow用户
提问于 2015-07-10 07:08:46
回答 1查看 1.1K关注 0票数 1

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

我使用的函数是libvlc_log_set_file,下面是docs:LibVLC日志记录文档

下面是我现在的代码:

代码语言:javascript
复制
//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: 0xC0000005:访问冲突写入位置0x000014中的未处理异常( 0x77559E33 (ntdll.dll) )”。

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

我在64位Windows 7机器上使用NW.js与WebChimera.js一起编译为32位。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-14 23:29:01

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

注意: logpath是包含日志文件路径的const char*。另外,您可能想要集群文件来确保线程的安全。您还可以在其中抛出一个开关语句,以处理LIBVLC_NOTICE、LIBVLC_ERROR、LIBVLC_WARNING和LIBVLC_DEBUG的级别参数,从而使日志记录具有一定的粒度。

代码语言:javascript
复制
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上,您可能希望使用CreateFile来设置FILE_SHARE_READ标志,并使用WriteFile,这样外部文本编辑器就可以在实时日志记录时查看文件。如果需要,请查看vsprintf_s而不是vfprintf来填充字符缓冲区,然后在logcb方法中传递给WriteFile。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31334594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档