从 vlc dll 生成 lib 文件时出现致命错误 LNK1107

发布于 2024-09-28 22:41:06 字数 242 浏览 1 评论 0原文

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

问候

I followed the instructions on this site http://wiki.videolan.org/GenerateLibFromDll for generating a lib file from a dll. The def file is created fine and I have editted it as suggested but when I try to generate the lib file I get the LNK1107 error for an invalid or corrupt file. Any help would be most welcome.

Regards

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

め七分饶幸 2024-10-05 22:41:06

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

例子:
C++ 调用 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》设置使用环境
微软 Visual Studio 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:\文档和 S
设置\尤金\我的文档\视觉
工作室
2008\项目\VLCApp\VLCApp\libvlc.def
" /out:"C:\Documents 和
设置\尤金\我的文档\视觉
工作室 2008\项目
s\VLCApp\VLCApp\libvlc.lib"
/machine:x86 Microsoft (R) 库
管理器版本9.00.30729.01
版权所有 (C) 微软公司。
保留所有权利。

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

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

Try another way: call function from dll by getting pointer with GetProcAddress;

Example:
C++ calling a dll

Update:

VLC media player downloaded as 7zip version;

I choose the way with 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;
}

It works fine for me, but you must change Character Set from default Unicode to Multi-Byte:
Project -> Properties -> General -> Character Set;

Try it! and good luck!;)

Update 2:

I got lib, here the trace from cmd:

Microsoft Windows XP [Version
5.1.2600] (C) Copyright 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
Files\Microsoft Visual Studio
9.0\Common7\Tools\vsvars32.bat" Setting environment for using
Microsoft Visual Studio 2008 x86
tools.

C:\Program Files\Microsoft Visual
Studio 9.0\VC\bin>dumpbin.exe /exports
"D:\My
Downloads\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 and S
ettings\Eugene\My Documents\Visual
Studio
2008\Projects\VLCApp\VLCApp\libvlc.def
" /out:"C:\Documents and
Settings\Eugene\My Documents\Visual
Studio 2008\Project
s\VLCApp\VLCApp\libvlc.lib"
/machine:x86 Microsoft (R) Library
Manager Version 9.00.30729.01
Copyright (C) Microsoft Corporation.
All rights reserved.

Creating library C:\Documents and
Settings\Eugene\My Documents\Visual
Studio
2008\Projects\VLCApp\VLCApp\libvlc.lib
and object C:\Documents and
Settings\Euge ne\My Documents\Visual
Studio
2008\Projects\VLCApp\VLCApp\libvlc.exp

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文