在DLL导入中找不到入口点

时间:2018-09-21 09:08:29

标签: c# pinvoke dllimport

尝试使用C#中的第三方本机DLL,但遇到一个例外,即找不到DLL入口点,也不知道是什么原因。

dumpbin /exports给我以下符号:?Foo@@YA_NPBDII0II_NMEEE01PAE@Z。我用undname解决了这个问题,该返回了:bool __cdecl Foo(char const *,unsigned int,unsigned int,char const *,unsigned int,unsigned int,bool,float,unsigned char,unsigned char, unsigned char,char const *,bool,unsigned char*)

因此,我尝试导入如下功能:

[DllImport("FooDll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] // evtl. __thiscall?, Charset?
    private static extern bool Foo(string name, uint x, uint y, string app, uint width, uint height, bool switch, double factor,
        byte r1, byte g1, byte b1, string store, bool switchBack, [In, Out] byte[] result);

我也尝试了CallingConvention = CallingConvention.ThisCall并没有使用charset参数,但是发生了相同的异常。

有什么想法去哪里找?

1 个答案:

答案 0 :(得分:0)

借助Wiktor和Hans的帮助,解决了入口点问题:

由于DLL似乎没有使用post_date_gmt声明,因此有必要将输入点指定为DllImport属性的参数,并使用修饰的/修饰的名称。此外,extern C参数的类型必须为factorfloat),以匹配堆栈上预期的参数长度。因此,C#代码现在看起来像这样:

System.Single