我正在尝试编写一个DLL,可以在Python (2.7)中导入它,但是我很难 "让它正常工作"。 当我使用
WinDLL()
或windll.LoadLibrary()
在Python中加载库,并测试导出的函数时,输出为空。 如果我向TestFunction()
添加参数,它会引发ValueError
,并指出可能有太多参数(实际上不是这样)。from ctypes import *
x = windll.LoadLibrary('./pymod.dll')
print x.TestFunction(123) #Should return 123.
main.h:
#ifndef __MAIN_H__
#define __MAIN_H__
#include <windows.h>
#define DLL_EXPORT __declspec(dllexport)
#ifdef __cplusplus
extern "C"
{
#endif
int DLL_EXPORT TestFunction(int data);
#ifdef __cplusplus
}
#endif
#endif
以及 main.cpp:
#include "main.h"
int DLL_EXPORT TestFunction(int x = 0) {
return x;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
switch (fdwReason){
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}
解决方案:问题出在调用约定上。
ValueError:可能使用过多参数调用过程(超出4个字节)
- b0bz