[DllImport(@"F:\Hw\ConsoleApplication1\ConsoleApplication1\Location.dll", EntryPoint = "LocateBlob", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
      
        public static extern int LocateBlob(string imgbuf, int width, int height, out float imgpara, out float deltax, out float deltay); 
“System.EntryPointNotFoundException”类型的未经处理的异常在 ConsoleApplication1.exe 中发生 其他信息: 无法在 DLL“F:\Hw\ConsoleApplication1\ConsoleApplication1\Location.dll”中找到名为“LocateBlob”的入口点。

解决方案 »

  1.   

    1.如果是c++的,使用Depends查下函数名称
      P/Invoke调用,只好是调用c类型的,
      如果是c++的,有可能会更改函数名称,
    更详细说明网搜 extern "C"的说明2.把c++ dll的函数定义贴出来
    指针类型的,用ref来对应。
      

  2.   

    看下这个https://blog.csdn.net/C_gyl/article/details/85101129
      

  3.   

    dll引用的对不对,路径,名称。函数名及变量声明的对不对。dll和编译环境和现在项目的编译环境是否一致。
      

  4.   

    int LocateBlob(char *imgbuf, int width, int height, float imgpara, float &deltax, float &deltay)  这是C++的dll
      

  5.   

    c++代码是你写的吗
    最好用def文件定义下导出
    不然函数名字和你代码里的可能不同
    比如加些_啊数字啊之类的
      

  6.   

    dll里面的函数出问题。检查一下生成dll和使用dll 的系统环境或者编译环境。
    参考:https://blog.csdn.net/C_gyl/article/details/85325469
      

  7.   

    如果导出表、函数名都检查没问题,那么可能你的.net程序是64bit的,无法调用32bit dll
      

  8.   

    C++ dll 不是我写的能否提供下协助。谢谢 QQ 837925598
      

  9.   


    给个列子给你,下面是我写C+ 和 C# ,你可以参考下:c++ 函数声明  使用__stdcall调用约定//60、Defire高阶创文件
    ReaderDLL int CallReader DesfireHLCreateFile(
    UCHAR addr,   //设备地址
    UCHAR cid,  //通道号, 一般为0x01
    int AID,  //子应用编号
    UCHAR keyNo,  //子应用主密钥编号 一般为0
    UCHAR keyType,  //子应用主密钥类型
    UCHAR *keyData,  //子应用主密钥数据 
    UCHAR fileID,   //文件ID
    UCHAR fileType,  //文件类型
    UCHAR commType,  //文件的通讯方式 0: Plain; 1: MACing;       3: Full Enciphered; 
    UCHAR keyNoFile1,   //更改文件的密钥KeyNO 和 读写文件KeyNo。
    UCHAR keyNoFile2,  //文件类型       写文件KeyNo, 读文件KeyNo
    unsigned int fileSpace,  //文件大小
    unsigned int minValue,  //最小值,4字节的整数,不能为负.
    unsigned int maxValue,    //最大值,4字节的整数
    unsigned int initValue,  //初始值
    UCHAR creditFlag,  //是否使用信用标志 0 不使用 1 使用
    unsigned int oneRecordLen,   //一个记录的大小,4字节的整数
    unsigned int maxRecordNum);  //最大记录数
    C# 调用//64、Defire高阶创文件
            [DllImport("ICReader.dll", EntryPoint = "DesfireHLCreateFile", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
            public static extern int DesfireHLCreateFile(
                byte addr,   //设备地址
                byte cid,  //通道号, 一般为0x01
                int AID,  //子应用编号
                byte keyNo,  //子应用主密钥编号 一般为0
                byte keyType,  //子应用主密钥类型
                ref byte keyData,  //子应用主密钥数据 
                byte fileID,   //文件ID
                byte fileType,  //文件类型
                byte commType,  //文件的通讯方式 0: Plain; 1: MACing;       3: Full Enciphered; 
                byte keyNoFile1,   //更改文件的密钥KeyNO 和 读写文件KeyNo。
                byte keyNoFile2,  //文件类型       写文件KeyNo, 读文件KeyNo
                UInt32 fileSpace,  //文件大小
                UInt32 minValue,  //最小值,4字节的整数,不能为负.
                UInt32 maxValue,    //最大值,4字节的整数
                UInt32 initValue,  //初始值
                byte creditFlag,  //是否使用信用标志 0 不使用 1 使用
                UInt32 oneRecordLen,   //一个记录的大小,4字节的整数
                UInt32 maxRecordNum);  //最大记录数
      

  10.   

    看错误,首先可以确定 .dll 文件是存在的,只是入口点找不到。
    很大程度上是因为名字碾平的问题。
    仔细查看一下导出的符号名字。
      

  11.   

    C++的dll编译出来的导出函数名并不是你定义的名字,还会加上调用方式、链接信息等等,所以不能直接通过函数名进行调用,例如“public: void __thiscall ShareInterface::Init(void)" (?Init@ShareInterface@@QAEXXZ)”。
    如果想要调用的话请使用dll查看器查看他的Origin,通过这个东西进行调用(需要在前面加一个#),比如,EntryPoint = "#1"