3
我试着写,我可以在Python(2.7)导入一个DLL,我有苦衷“使其工作”。当我使用WinDLL()
或windll.LoadLibrary()
加载在Python库,并测试导出函数的输出我得到的是空的。如果我加一个参数TestFunction()
它提出了一个ValueError
其中指出,有可能是许多参数(这真的不是)。使用与Python(使用ctypes的)一个DLL,没有工作
蟒蛇文件:
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;
}
解决:问题是错误的调用约定。
我没有直接回答你的问题/问题,但如果你想使Python模块,我会建议Boost.Python的。只是一个想法。 – DubyaDubyaDubyaDot 2012-08-02 02:21:18
你能粘贴确切的错误吗?我认为它应该指定一些多余/丢失的字节。 – 2012-08-02 02:26:02
确切的错误是 'ValueError异常:程序可能有太多的参数调用(超过4个字节)' – JHolta 2012-08-02 03:22:52