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

#include "stdafx.h"
#include <iostream>
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" <<endl;
 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 <windows.h>

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 转换。

posted on 2008-04-15 23:08 -274°C 阅读(2415) 评论(1)  编辑  收藏 所属分类: python


FeedBack:
# re: python 调用dll
2008-08-06 16:52 | UMU
Mark  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 

常用链接

留言簿(21)

随笔分类(265)

随笔档案(242)

相册

JAVA网站

关注的Blog

搜索

  •  

积分与排名

  • 积分 - 871697
  • 排名 - 37

最新评论