ctypes 在win上调用dll的注意事项
1. 首选用vs2012创建dll工程
http://hi.baidu.com/superstarworld/item/84a8fc54086325cfd3e10cae
创建动态链接库:
添加代码:
创建20130527_Dll02.cpp\20130527_Dll02.h\20130527_Dll02.def文件
20130527_Dll02.cpp内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// 20130527_Dll02.cpp : Defines the exported functions for the DLL application. // #include "stdafx.h" #include "20130527_Dll02.h" int add( int x, int y) { return x+y; } int subtract( int x, int y) { return x-y; } |
20130527_Dll02.h内容:
1
2
3
4
5
6
7
8
9
10
11
12
|
#ifndef DLL02_H #define DLL02_H #ifdef DLL02_API #else #define DLL02_API _declspec(dllexport) #endif //DLL02_API DLL02_API int add( int x, int y); DLL02_API int subtract( int x, int y); #endif //DLL02_H |
20130527_Dll02.def内容:
1
2
3
4
5
6
|
LIBRARY 20130527_Dll02 EXPORTS DllAdd = add DllSubtract = subtract |
编译后,系统提示成功。这样win32的dll就生成完成了
2. 注意你的python是多少位的,如果是64位,那么“右键上面的工程属性,修改右上角的配置管理器,加一个x64,然后重新生成项目”
如果不这样会报“WindowsError: [Error 193] %1 不是有效的 Win32”这样的错
3. 注意修改--右键上面的工程属性,最左边的活动改为release,然后f7生成dll才能用
python方面如何调用:
# coding=utf-8
"""
c--code:
#include "stdafx.h"
extern "C" __declspec(dllexport) const char* SayHello(int mode)
{
if(mode==1){
return "hello world";
}else{
return "sb";
}
}
"""
import ctypes
libc = ctypes.CDLL("1_DLLDemo.dll")
a = libc.SayHello
a.argtypes = [ctypes.c_int] # 参数类型
a.restype = ctypes.c_char_p # 返回值类型
print a(1)
print a(2)