zoukankan      html  css  js  c++  java
  • C#中加载dll的问题

    最近在做C#上进行H264解码的网络摄像头,通过各种折腾,还是没法解决,无奈之下只好使用在C#下加载ffmpeg的动态库进行,在加载的时候说不遇到问题那是不可能的。


    下面就我遇到的问题和解决方案进行发表:


    1.加载方法

    很多人都想着通过右键引用的方法进行dll的加载,当然那是简便的方法,不过对于用C++编译的动态库貌似这方法行不通,往往会提示“未能添加XXX.dll的引用。请确保此文件可访问并且是一个有效的程序集或COM组件”。因此,本人想通过右键引用的方法行不通。

    囧么办呢?

    用DllImport加载吧。

    [DllImport("XXX.dll")]
    public static extern void XXX();

    当然,DllImport还有一些参数和方法可以避免一些问题的,我也没仔细研究透在这先不去介绍。

    通过这个加载之后你只要关的dll放到binDebug或binRelease目录下就行了。


    行了?

    如果能用那就行了呗,还想什么,如果不能用呢,废话,那当然不行了。


    2.“无法加载 DLL“XXX.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。”

    遇到这类问题可以考虑两个方面

    (1). 路径是否正确

    在C#中不知道是不是路径不对的问题怎么验证?

    很简单,在你调用dll的函数之前加上这句话,看看你的dll是都在程序路径中

    MessageBox.Show(AppDomain.CurrentDomain.BaseDirectory);

    (2). dll中是否用到了别的dll了

    如果是这个问题的话,你只能去找找你的dll看看是否用到了其他的dll了,关于怎么通过一个dll去看他是否依赖别的dll这一问题我目前也没有明确的办法。


    3.知道dll中有些啥函数

    我在加载dll的时候不知道dll中有哪些接口怎么办,或者使用别人封装的东西时报出类似于“无法在 DLL“XXX.dll”中找到名为“XXX函数”的入口点。”


    在这里我是通过LordPE这个软件来看dll中都有些啥函数的。

    这里讲一下怎么使用这软件看dll中的函数:

    打开软件


    点击“PE 编辑器”按钮,选择你要查看的dll


    选择“目录”


    点击红笔部分的“..”按钮


    瞧,这不把所有函数都不显示出来了没


    如果你的程序提示“无法在 DLL“XXX.dll”中找到名为“XXX函数”的入口点”这个错误,你可以考虑考虑看看你的dll有木有这个函数

  • 相关阅读:
    Linux——k8s命令别名修改
    k8s—centos7安装部署NFS服务器和客户端及基于nfs的动态存储storageclass使用总结
    MySQL—用户和权限管控
    MySQL—常用SQL语句整理总结
    Zookeeper——入门介绍(相关原理、安装启动及使用操作)
    SpringBoot——Quartz定时框架的使用详解和总结
    SpringBoot——@Scheduled的自定义周期性线程池解决任务延时执行问题
    Linux—用户新建目录和文件的默认权限设置:umask详解
    设计模式——单例模式详解
    Linux—CPU核数、上下文切换介绍及pidstat等命令详解
  • 原文地址:https://www.cnblogs.com/yanergui/p/5014310.html
Copyright © 2011-2022 走看看