System.EntryPointNotFoundException 从 DLL 调用函数时

System.EntryPointNotFoundException when calling function from DLL

我正在尝试使用外部 DLL 库。到目前为止我使用的所有函数都工作正常,除了这个抛出 EntryPointNotFoundException

的函数

我尝试使用 VS dumpbin,我可以在导出中找到该函数的名称

我的dllimport代码

[return: MarshalAs(UnmanagedType.I1)]
[DllImport(DLLPATH, EntryPoint = prefix + "APIConfigureEyeMeasurements"]
protected static extern bool ConfigureEyeMeasurements(byte instance, bool doTopMeasurements, bool doBaseMeasurements, bool doMin,
                                      bool doMax, bool doRiseTime, bool doFallTime, bool doPeakToPeak,
                                      bool doEyeAmplitude, bool doEyeHeight, bool doEyeWidth, bool doCrossingPercentage, bool doJitter, bool doSNR, bool doVEC, bool doTDEC);

头文件中的函数:

bool __stdcall APIConfigureEyeMeasurements(
    byte instance,
    bool doTopMeasurements, bool doBaseMeasurements, bool doMin,
    bool doMax, bool doRiseTime, bool doFallTime, bool doPeakToPeak,
    bool doEyeAmplitude, bool doEyeHeight, bool doEyeWidth,
    bool doCrossingY, bool doJitter, bool doSNR, bool doVEC, bool doTDEC);

会不会是我正在使用的参数或导入引起的。奇怪的是所有其他功能都工作正常

您的 C# 声明有 16 个参数,每个参数占用 4 个字节的堆栈 space。因此后缀应该是@64。它实际上是 @68 这意味着您的函数声明不正确。您可能遗漏了一个参数,或者错误地声明了一个参数的类型,我相信如果您仔细检查 C++ 头文件,您会发现这一点。

啊,刚刚把题重读到最后,发现头文件也少了一个参数。因此,您似乎需要与 DLL 的开发人员联系才能解决此问题。您使用的 DLL 与您拥有的头文件不匹配。