我一直很困惑,这怎么可能发生。
所以继续这笔交易,我试图用一个名为NV2.dll的dll播放V2M芯片。
它被引用,我使用它的函数就像普通的一样。 但是,当我尝试运行应用程序时,我得到了
无法加载DLL' V2.dll':找不到指定的模块。 (HRESULT异常:0x8007007E)
我使用的引用DLL称为NV2,我已经检查过它,程序集是NV2而不是V2,为什么它试图加载一个名字不同的dll?!
答案 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();
}
}
}