【发布时间】:2012-01-28 16:40:51
【问题描述】:
我正在尝试为 C# 编译显示为 here 的示例项目。它必须转换为 VS2010,但效果很好。它会构建、运行,但在尝试访问 DLL 函数时会死掉。
我制作了一系列images 来展示我的步骤。如您所见,我设计的设备已连接并正确配置,但我真的认为这与问题无关。在 Form1.cs 文件中,以下注释解释了如何使用 DLL:
/*
PLEASE NOTE
You must add a reference to the FTChipIDNet.dll in order to use this sample
To do this:
1. Click on Solution explorer tab.
2. Right click the References tree.
3. Choose Add Reference option.
4. Browse to the FTChipIDNet.dll (as a personal preference I place this in my bin directory)
5. Click OK
*/
我按照上面显示的说明进行操作,并且修复了对命名空间 FTChipID 的未定义引用。我还手动检查了对象浏览器,以确保 GetNumDevices 函数存在并且确实存在。
单击按钮会产生此错误:
DLLNotFoundException 未处理:
无法加载 DLL 'FTChipID.dll':找不到指定的模块。 (HRESULT 异常:0x8007007E)
在这行代码:
FTChipID.ChipID.GetNumDevices(ref numDevices);
现在,您可能会想“错误表明它需要 FTChipID.dll,而不是 FTChipIDNet.dll。”我想知道同样的事情。我有 FTChipID.dll 以及 .lib 和 .h 文件,但我不知道如何使用它们,也不知道它们需要放在哪里才能让这个程序找到它们。我尝试添加对FTChipID.dll的引用,但是VS2010说
无法添加对 ...\FTChipID.dll 的引用。请确保该文件是可访问的,并且它是一个有效的程序集或 COM 组件。
我也不知道那是什么意思。有任何想法吗?提前致谢。
【问题讨论】:
-
您是否将 .dll 作为项目参考的一部分添加..?另外,您是否正在使用该 .dll 的命名空间。如果 .dll 是 .net 2.0 - 3.5 .dll 与 .net 4.0 .dll,还请查看该 .dll 的版本控制。或 GAC在项目的属性设置中确保它是一个 4.0 项目我也将尝试将它编译为一个 3.5 项目以及看看有什么区别..
-
将 FTChipID.dll 添加为项目中的输出(或将其复制到 bin\Debug 文件夹)并重试。我猜 FTChipIDNet.dll 是前者的包装器。
-
把FTChipID.dll和FTChipIDNET.dll放在同一个目录下。然后框架应该能够找到它。
-
使用 Project + Add Existing Item 将 DLL 添加到您的项目中。将其 Copy to Output Directory 属性设置为“Copy if newer”。
-
我将 FTChipID.dll 复制到 bin\Debug 文件夹中。它会产生一些奇怪的行为。在 VS 中运行调试器会做同样的事情——它找不到 FTChipID.dll。但是,在 bin\Debug 文件夹中的 VS2010 之外运行可执行文件会产生一个新错误。 “试图加载格式不正确的程序。(来自 HRESULT 的异常:0x8007000B)。”