python 调用dll

python 调用dll

首先用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.net/110574.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java帝国时代_我的第一个java程序

    java帝国时代_我的第一个java程序1C语言帝国的统治现在是公元1995年,C语言帝国已经统治了我们20多年,实在是太久了。1972年,随着C语言的诞生和Unix的问世,帝国迅速建立统治,从北美到欧洲,从欧洲到亚洲,无数程序员臣服在他的脚下。帝国给我们提供了极好的福利:贴近硬件,运行极快,效率极高。使用这些福利,程序员们用C开发了很多系统级软件,操作系统,编译器,数据库,网络

    2022年9月24日
    2
  • Jenkins安装_jenkins安装与配置

    Jenkins安装_jenkins安装与配置前言jenkins的环境搭建方法有很多,本篇使用docker快速搭建一个jenkins环境。环境准备:mac/Linuxdockerdocker拉去jenkins镜像先下载jenkins镜

    2022年7月30日
    7
  • CSS,font-family,好看常用的中文字体

    CSS,font-family,好看常用的中文字体

    2021年9月20日
    325
  • 常量表达式是什么_const常量

    常量表达式是什么_const常量常量表达式值(constant-expressionvalue)。通常情况下,常量表达式值必须被一个常量表达式赋值,而跟常量表达式函数一样,常量表达式值在使用前必须被初始化。一、常量表达式1.1运行时常量性与编译时常量性在C++中,我们常常会遇到常量的概念。常量表示该值不可修改,通常是通过const关键字来修饰的。比如:constinti=3;const还可以修饰函数参数、函数返回值、函数本身、类等。在不同的使用条件下,const有不同的意义,不过大多数情况下,const描述的都

    2022年9月27日
    4
  • 关于使用iframe嵌套页面的跳转方式

    关于使用iframe嵌套页面的跳转方式一、背景A,B,C,D都是jsp,D是C的iframe,C是B的iframe,B是A的iframe,在D中跳转页面的写法区别如下。二、JS跳转window.location.href、location.href本页面跳转,D页面跳转parent.location.href上一层页面跳转,C页面跳转top.location.href最外层页面跳转,A页面跳转三、链接或者formD页面中有for…

    2022年6月16日
    55
  • 贝叶斯公式的理解【转】

    贝叶斯公式的理解【转】本文转载自:https://blog.csdn.net/qq_37953276/article/details/79297316作者:知乎用户 链接:https://www.zhihu.com/question/21134457/answer/169523403来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。最近我自己在学习一些关于机器学习的东西,…

    2022年5月5日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号