Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1502939
  • 博文数量: 164
  • 博客积分: 2993
  • 博客等级: 少校
  • 技术积分: 1718
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-24 11:42
文章分类

全部博文(164)

文章存档

2014年(1)

2013年(36)

2012年(90)

2011年(37)

分类: Python/Ruby

2012-02-24 16:42:24

首先用visual studio写个dll。
// TestDll.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include
using namespace std;

#ifdef _MANAGED
#pragma managed(push, off)
#endif

#ifdef __cplusplus
#define EXPORT extern "C"__declspec(dllexport)
#else
#define EXPORT __declspec(dllexport)
#endif
EXPORT int HelloWorld()
{
cout <<"hello world" <return 0;
}


BOOL APIENTRY DllMain( HMODULE hModule,
DWORD  ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

#ifdef _MANAGED
#pragma managed(pop)
#endif

然后用C++ 来调用(当然这里可选)
// CallDll.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include

int _tmain(int argc, _TCHAR* argv[])
{
HMODULE hDll = ::LoadLibrary(TEXT("TestDll.dll"));
typedef int pHelloWorld();
pHelloWorld *pHello = (pHelloWorld *)::GetProcAddress(hDll, "HelloWorld");
pHello();
return 0;
}

而python的调用也很简单:

from ctypes import *
fileName="TestDll.dll"
func=cdll.LoadLibrary(fileName)
#print func.HelloWorld()
func.HelloWorld()

如果有参数记得转换成C类型的。比如用c_int()
而参数如果是指针类型用 byref 转换。
阅读(2840) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~