posts - 131,  comments - 234,  trackbacks - 0

首先用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 阅读(219) 评论(0)  编辑  收藏 所属分类: python

标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
 

<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

黄树林里分叉两条路,而我,我选择了较少人迹的一条,使得一切多麽地不同。


常用链接

留言簿(11)

随笔分类(136)

随笔档案(131)

JAVA网站

关注的Blog

最新随笔

搜索

  •  

积分与排名

  • 积分 - 73665
  • 排名 - 104

最新评论

阅读排行榜

评论排行榜