【问题标题】:fatal error LNK1107 when generating lib file from vlc dll从 vlc dll 生成 lib 文件时出现致命错误 LNK1107
【发布时间】:2010-10-20 17:07:21
【问题描述】:

我按照本网站http://wiki.videolan.org/GenerateLibFromDll 上的说明从 dll 生成 lib 文件。 def 文件创建得很好,我已经按照建议对其进行了编辑,但是当我尝试生成 lib 文件时,我收到了无效或损坏文件的 LNK1107 错误。任何帮助都将受到欢迎。

问候

【问题讨论】:

    标签: dll vlc


    【解决方案1】:

    尝试另一种方式:通过GetProcAddress获取指针从dll调用函数;

    示例: C++ calling a dll

    更新:

    VLC 媒体播放器下载为 7zip 版本;

    我选择使用 GetProcAddress 的方式:

    #include <windows.h>
    #include <iostream>
    
    
    int main()
    {
        //VLC_PUBLIC_API const char * libvlc_get_version(void);
    
        //Set directory path with libvlccore.dll and libvlc.dll
        SetCurrentDirectory("C:/Program Files/VideoLAN/VLC");
    
        HINSTANCE hGetProcIDDLL = LoadLibrary("libvlc.dll");
    
        FARPROC lpfnGetProcessID = GetProcAddress(HMODULE(hGetProcIDDLL),"libvlc_get_version"); 
    
        if(lpfnGetProcessID == 0)
        {
            std::cout << "GetProcAddress failed";
    
            return 1;
        }
    
        typedef const char * (__stdcall * pICFUNC)(void); 
    
        pICFUNC MyFunction = pICFUNC(lpfnGetProcessID);
    
        std::cout << MyFunction() << std::endl;
    
        //output: 1.1.4 The Luggage
    
        return 0;
    }
    

    它对我来说很好,但你必须将字符集从默认的 Unicode 更改为多字节: 项目 -> 属性 -> 常规 -> 字符集;

    试试吧!祝你好运!;)

    更新 2:

    我得到了 lib,这里是来自 cmd 的跟踪:

    Microsoft Windows XP [版本 5.1.2600] (C) 版权所有 1985-2001 Microsoft Corp.

    C:\Program Files\Microsoft Visual Studio 9.0\VC\bin>vcvars32.bat

    C:\Program Files\Microsoft Visual Studio 9.0\VC\bin>"C:\Program 文件\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat" 设置使用环境 微软视觉工作室 2008 x86 工具。

    C:\Program Files\Microsoft Visual Studio 9.0\VC\bin>dumpbin.exe /exports “D:\我的 下载\VLC\vlc-1.1.4-win32\vlc-1.1.4\libvlc.dll"

    "C:\Documents and Settings\Eugene\My Documents\Visual Studio 2008\Projects\VLCApp\VLCApp\libvlc.def"

    C:\Program Files\Microsoft Visual Studio 9.0\VC\bin>lib /def:"C:\Documents 和 S ettings\Eugene\My Documents\Visual 工作室 2008\Projects\VLCApp\VLCApp\libvlc.def " /out:"C:\文档和 设置\尤金\我的文档\视觉 工作室 2008\项目 s\VLCApp\VLCApp\libvlc.lib" /machine:x86 Microsoft (R) 库 管理器版本 9.00.30729.01 版权所有 (C) 微软公司。 保留所有权利。

    创建库 C:\Documents 和 设置\尤金\我的文档\视觉 工作室 2008\项目\VLCApp\VLCApp\libvlc.lib 和对象 C:\Documents 和 Settings\Euge ne\我的文档\Visual 工作室 2008\Projects\VLCApp\VLCApp\libvlc.exp

    C:\Program Files\Microsoft Visual Studio 9.0\VC\bin>

    【讨论】:

    • 感谢您的回复,我尝试了该示例,但它似乎不起作用。
    • @paj7777 你知道导出函数的参数吗?这个dll是你自己的库还是第三方的?)))
    • 我有参数,因为我有头文件,dll 是 vlc 的一部分,如果你按照我提供的链接,将带你到 vlc 的 wiki。感谢您的帮助。
    • 感谢您最近的帖子。获取版本的调用很好,但是当我尝试调用 libvlc_new 时,我得到一个调用约定运行时错误,尽管我很确定我正确地传递了参数。是否有根据我自己的检查所需的约定?
    • 对不起,我试过了,但我不知道如何帮助你,我没有使用 VLC。也许 exe-module 在调用 libvlc_new 之前会进行一些特定的初始化,例如:初始化 COM,填充一些特定的结构,设置一些变量或路径等;也许你需要检查这些选项;)
    猜你喜欢
    • 2014-01-15
    • 2011-07-22
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多