首先用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 转换。
转载于:https://www.cnblogs.com/soft115/archive/2011/08/10/2134087.html
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/110574.html原文链接:https://javaforall.cn