首先用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
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/110574.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...