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)

 


分享到: 微信 更多