• C#.net调用动态库dll注意事项


    C#.net调用动态库dll注意事项


    本文主要描述作者在工作中所遇到技术难点及问题,最后提出相关的解决方案

    场景

     公司有个业务需求涉及到ID读卡器,构建成在ID卡读卡器一刷ID卡,系统就自动显示其ID卡号以及该ID卡的基本信息和消费的记录等信息;

    问题

     在选购相关的ID读卡器产品后,下载其开发包其中包含了用C++语言开发的动态库DLL,在调用时出现以下问题:

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

    2、尝试读取或写入受保护的内存。这通常指示其他内存已损坏

    解决方案

    1、第一个问题“无法加载 DLL“OUR_IDR.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。”,解决很简单,具体方法是将 dll复制到应用程序中的bin目录即可。

    2、

    我在调用以下代码时:

    [DllImport("OUR_IDR.dll")]
     public static extern byte[] idr_read(byte[] pserial);

     就出现错误“尝试读取或写入受保护的内存。这通常指示其他内存已损坏 ”。

    解决方法是将byte[]改为IntPtr即可,如:

    [DllImport("OUR_IDR.dll")]
    public static extern IntPtr idr_read(IntPtr pserial);

     在调用时:

    IntPtr cardId = new IntPtr();
    IntPtr result = Module.idr_read(cardId);

     即可;

    C#在调用C++动态库DLL时,注意数据类型转换

    C# 与 C++ 数据类型对照
    C++            C#
    =====================================
    WORD            ushort
    DWORD            uint
    UCHAR            int/byte   大部分情况都可以使用int代替,而如果需要严格对齐的话则应该用bytebyte
    UCHAR*            string/IntPtr
    unsigned char*         [MarshalAs(UnmanagedType.LPArray)]byte[]/?(Intptr)
    char*            string
    LPCTSTR            string
    LPTSTR            [MarshalAs(UnmanagedType.LPTStr)] string
    long            int
    ulong               uint
    Handle            IntPtr
    HWND            IntPtr
    void*            IntPtr
    int            int
    int*            ref int
    *int            IntPtr
    unsigned int        uint
    COLORREF                uint
    转载请注明出处[http://samlin.cnblogs.com/

    欢迎关注本人公众号:

    作者赞赏
  • 相关阅读:
    java生成json字符串的方法
    JSON的三种解析方式
    Android Studio你不知道的调试技巧
    Android 打开URL
    build.gradle中引入jar
    Spark RDD/Core 编程 API入门系列之map、filter、textFile、cache、对Job输出结果进行升和降序、union、groupByKey、join、reduce、lookup(一)
    NovaMind *的安装、和谐破解到永久使用
    小Q书桌的下载、安装和使用
    作业提交过程分析(源码)
    SparkContext的初始化过程分析(源码)
  • 原文地址:https://www.cnblogs.com/samlin/p/DllImport.html
Copyright © 2020-2023  润新知