无法找到DLL,因为文件名与引用的文件名不同?

时间:2016-01-30 22:24:15

标签: c# winforms dll

我一直很困惑,这怎么可能发生。

所以继续这笔交易,我试图用一个名为NV2.dll的dll播放V2M芯片。

它被引用,我使用它的函数就像普通的一样。 但是,当我尝试运行应用程序时,我得到了

  

无法加载DLL' V2.dll':找不到指定的模块。 (HRESULT异常:0x8007007E)

我使用的引用DLL称为NV2,我已经检查过它,程序集是NV2而不是V2,为什么它试图加载一个名字不同的dll?!

1 个答案:

答案 0 :(得分:1)

很明显,V2.dll中有NV2.dll的引用。要么文档很糟糕,要么你没有注意到那部分,但是在NV2类的构造函数中,他们尝试编写V2.dll,它被保存在Resources中将dll作为byte[] V2到磁盘,即到目录C:\Windows\system32。代码:

    public NV2()
    {
        List<WeakReference> _ENCList = NV2.__ENCList;
        Monitor.Enter(_ENCList);
        try
        {
            NV2.__ENCList.Add(new WeakReference(this));
        }
        finally
        {
            Monitor.Exit(_ENCList);
        }
        //Here comes the part that writes the resources
        FileStream fileStream = new FileStream(string.Concat(Environment.GetFolderPath(Environment.SpecialFolder.System), "\\V2.dll"), FileMode.OpenOrCreate);
        fileStream.Write(Resources.V2, 0, checked((int)Resources.V2.Length));
        fileStream.Close();
    }

这意味着你的应用程序中首先要做的是

  var engine = new NV2(); //triggers the constructor code

触发它,或者你去那里硬核并从他们的dll转储byte[]

我已将此文件转发给您并将其压缩:http://www.file-upload.net/download-11263190/V2.zip.html

(您可以通过使用teleriks反编译器保存项目,修复资源中的错误,将项目更改为控制台项目,然后编写Main函数来完成此操作)

using System.IO;
using NV2.My.Resources;

namespace NV2
{
    class MainClass
    {
        static void Main(string[] args)
        {
            FileStream fileStream = new FileStream("V2.dll", FileMode.OpenOrCreate);
            fileStream.Write(Resources.V2, 0, checked((int)Resources.V2.Length));
            fileStream.Close();
        }
    }
}