擅长:python、mysql、java
<p>您说过您试图调用一个未导出的函数;据我所知,这在Python中是不可能的。然而,你的问题似乎仅仅是名字被弄错了。在</p>
<p>可以使用ctypes调用任意导出。由于名称已损坏,并且不是有效的Python标识符,因此可以使用getattr()。在</p>
<p>如果有正确的信息,另一种方法是按序号查找导出,如果根本没有导出名称,则必须这样做。获得序数的一种方法是使用垃圾箱.exe,包含在许多Windows编译语言中。它实际上是链接器的前端,所以如果你有MS链接.exe,也可以将其与适当的命令行开关一起使用。在</p>
<p>要获取函数引用(它是一个绑定到它的地址的“函数指针”对象),可以使用如下方法:</p>
<p>导入ctypes
func=获取属性(ctypes.windll.msvcrt,“@@myfunc”)
retval=func(无)</p>
<p>当然,您可以将“msvcrt”替换为您特别想要调用的dll。在</p>
<p>我在这里没有展示的是如何解开名称以派生调用签名,从而得到必要的参数。这样做需要一个DeangRangle,而这些对DLL创建的C++编译器的版本<EM >和版本<EEM>非常特殊。在</p>
<p>如果函数是stdcall,则会进行一定量的错误检查,因此有时您可以对某些事情进行修改,直到正确为止。但是如果函数是cdecl,那么就没有办法自动检查。同样,如果合适的话,您必须记住包含额外的this参数。在</p>