Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2899320
  • 博文数量: 348
  • 博客积分: 2907
  • 博客等级: 中校
  • 技术积分: 2272
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-12 09:16
个人简介

专注 K8S研究

文章分类

全部博文(348)

文章存档

2019年(22)

2018年(57)

2016年(2)

2015年(27)

2014年(33)

2013年(190)

2011年(3)

2010年(14)

分类: Python/Ruby

2013-08-30 11:42:45

原文地址:python调用dll 作者:lrfgjj2

首先用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 转换。
阅读(1908) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~