EntryPointNotFoundException

来源:互联网 发布:华融新兴产业投资 知乎 编辑:程序博客网 时间:2024/05/22 01:39

EntryPointNotFoundException

此异常说明我们的DLL入口处找不到,但是我确实已经存放进去,为何找不到呢。后来经过度娘的指导。发现原来在生成dll后方法的签名有的会变。

解决方法

下载最新的 Dependency Walker 用来进行查看我们生成的Dll里面的函数签名。
这里写图片描述


为何会出现这种情况呢:因为修饰约定规则的影响。

DLL(动态库)导出函数名乱码含义  C++编译时函数名修饰约定规则:      __stdcall调用约定:      1、以"?"标识函数名的开始,后跟函数名;     2、函数名后面以"@@YG"标识参数表的开始,后跟参数表;    3、参数表以代号表示:      X--void   D--char   E--unsigned char   F--short   H--int   I--unsigned int   J--long   K--unsigned long   M--float   N--double   _N--bool   ....      PA--表示指针,后面的代号表明指针类型,如果相同类型的指针连续出现,以"0"代替,一个"0"代表一次重复;      4、参数表的第一项为该函数的返回值类型,其后依次为参数的数据类型,指针标识在其所指数据类型前;      5、参数表后以"@Z"标识整个名字的结束,如果该函数无参数,则以"Z"标识结束。      其格式为"?functionname@@YG*****@Z""?functionname@@YG*XZ",例如                          int Test1(char *var1, unsigned long)-----?Test1@@YGHPADK@Z                     void Test2()-----"?Test2@@YGXXZ"   __cdecl调用约定:      规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的"@@YG"变为"@@YA"。     __fastcall调用约定:      规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的"@@YG"变为"@@YI"。    如果要用DEF文件输出一个"C++"类,则把要输出的数据和成员的修饰名都写入.def模块定义文件      所以...   通过def文件来导出C++类是很麻烦的,并且这个修饰名是不可避免的
0 0
原创粉丝点击