解决 DLL导入

danut1234

新成员
已加入
2020年12月27日
留言内容
4
编程经验
1-3
嗨,我想编写一个程序来控制电子板。电子板的生产者提供DLL来访问板的某些特殊功能。但是我不能使用它,这给了我一个错误。这是尝试使用它的方法。
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        [System.Runtime.InteropServices.DllImport("libe1803d.dll")]
        public static extern int E1803_get_library_version();
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
           label1.Text = Convert.ToString(E1803_get_library_version());
        }
    }
}
E1803_get_library_version()是"libe1803d.dll"我从文档中知道这一点。
DLL文件位于Debug文件夹中...实际上,我已将DLL文件放置在项目文件夹中的所有位置,包括Windows / system32文件夹中
我试图在项目中添加引用,但是我不能,它说"该文件不可访问或不是有效的程序集或COM组件。"(类似的东西...)
我试图查看DLL文件的依赖性,并说我缺少一些文件...在提供一些文档后,有人说问题出自VC ++重新分发程序包,但我已经安装了VC ++ 2012(我的Visual Studio版本)VC ++ 2015年2017年和2019年。
这是我得到的错误。
无法加载DLL'libe1803d.dll':找不到指定的模块。 (来自HRESULT的异常:0x8007007E)
感谢您的帮助。
 
由主持人最后编辑:
Solution
安装VS2017社区后,要拥有v141,我能够从示例文件夹中编译点网DLL ...但毕竟麻烦了,因为DotNet DLL请求了另一个DLL,我无法启动应用程序"dcomp.dll"上班。 DCOMP.dll是Windows 8的一部分,我有Windows7。C++非托管DLL libe1803d.dll需要相同的DCOMP.DLL才能工作,但我只是忽略了这个问题...因此,最后,我需要Windows 8 ....

我在这里找到了解决方案 解决方案链接

danut1234

新成员
已加入
2020年12月27日
留言内容
4
编程经验
1-3
我的应用程序在32位上运行,DLL文件有两种变体,分别是32位和64位,我使用了32位版本的DLL。

如何将DLL文件添加到解决方案资源管理器?添加引用不起作用,我尝试将其拖放,它似乎没有出现任何商品,并且我有相同的错误。

在自述文件中写道:
在两种情况下,为了正确使用和编译,都必须使用环境开关之一ENV_WINDOWS(对于所有Windows操作系统)或ENV_LINUX
(对于所有Linux操作系统)必须定义。

我怎么"定义" the ENV_WINDOWS?

如果有帮助,我将档案文件与DLL以及生产者提供的两个示例附加在一起。
如果有人需要更多信息,我会为他们提供。
 

附件

  • libe1803.zip
    236.1 KB · 观看次数: 3
Last edited:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
如何将DLL文件添加到解决方案资源管理器?添加参考无效
当然不是。您没有引用它。它只是一个文件,您可以像其他任何文件一样添加它,方法是右键单击项目并选择 > 现有项目。或者,您可以选择 添加现有项目 来自 项目 菜单。本练习的目的是简单地确保DLL始终位于输出文件夹中,以便与应用程序一起部署。您不必那样做,但这是确保文件始终存在的好方法,而无需考虑任何其他问题。但是,如果您必须设置该环境变量,则如何输出该文件夹中的文件并不重要。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
可以在您自己的项目中引用托管库。测试项目 @约翰·H 提到的将做到这一点,它们将向您展示如何在托管库中调用方法。
 

danut1234

新成员
已加入
2020年12月27日
留言内容
4
编程经验
1-3
安装VS2017社区后,要拥有v141,我能够从示例文件夹中编译点网DLL ...但毕竟麻烦了,因为DotNet DLL请求了另一个DLL,我无法启动应用程序"dcomp.dll"上班。 DCOMP.dll是Windows 8的一部分,我有Windows7。C++非托管DLL libe1803d.dll需要相同的DCOMP.DLL才能工作,但我只是忽略了这个问题...因此,最后,我需要Windows 8 ....

我在这里找到了解决方案 解决方案链接
 
最佳 底部