首先用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 閱讀(2623)
評論(1) 編輯 收藏 所屬分類:
python