Windows使用MSVC,命令行编译,链接64位dll,Python调用
文章目录
- 代码
- 编译
- 链接
- Python调用
前一篇博客: Windows下使用Visual Studio自带的MSVC,命令行编译C/C++程序
代码
mylib.h代码如下:
#ifndef MYLIB_H
#define MYLIB_H#if defined(BUILDING_MYLIB)
#define MYLIB_API __declspec(dllexport) __stdcall
#else
#define MYLIB_API __declspec(dllimport) __stdcall
#endif#ifdef __cplusplus
extern "C" {#endifint MYLIB_API helloworld(void);#ifdef __cplusplus
}
#endif#endif
mylib.c代码如下:
#include "mylib.h"
#include <stdio.h>int MYLIB_API helloworld(void)
{printf("Hello World DLL");return 42;
}
main.c 代码如下:
/* No need to include this if you went the module definition* route, but you will need to add the function prototype.*/
#include "mylib.h"int main(void)
{helloworld();return (0);
}
编译
打开64位的x64 Nativate Tools Command Prompt for VS 2019
。
先编译dll:
C:\Users\peter>cl /DBUILDING_MYLIB mylib.c /LD
用于 x64 的 Microsoft (R) C/C++ 优化编译器 19.22.27905 版
版权所有(C) Microsoft Corporation。保留所有权利。mylib.c
Microsoft (R) Incremental Linker Version 14.22.27905.0
Copyright (C) Microsoft Corporation. All rights reserved./out:mylib.dll
/dll
/implib:mylib.lib
mylib.obj正在创建库 mylib.lib 和对象 mylib.exp
可以看到编译产生了dll
,exp
,lib
,obj
四个文件。
链接
然后链接:
C:\Users\peter>cl main.c /link mylib.lib
用于 x64 的 Microsoft (R) C/C++ 优化编译器 19.22.27905 版main.c/out:main.exe
mylib.lib
main.obj
可以运行了:
C:\Users\peter>main.exe
Hello World DLL
Python调用
Python调用代码如下:
import os
import sys
from ctypes import *lib = cdll.LoadLibrary('mylib.dll')# Our 'ctypes' wrapper around the DLL function -- this is where we
# convert Python types to C types and call the DLL function.
def print_helo():func = lib.helloworldfunc()print_helo()
参考:c - What are the exact steps for creating and then linking against a Win32 DLL on the command line? - Stack Overflow
Windows使用MSVC,命令行编译,链接64位dll,Python调用相关推荐
- msvc命令行编译静态库和动态库
编写一个静态库 编写要打包为静态库的函数,内容如下: // jclib.cpp int func(int a, int b) {return a + b; } 在msvc开发人员命令提示符中执行 cl ...
- 如何用MSVC命令行编译 SQLite ?
作者:cuicui 这个问题的关键是如何配置MSVC 工具:VS2017 要编译的sqlite3源代码从https://www.sqlite.org/download.html下载 官方说明中的方法是 ...
- 在命令行上启用 64 位 Visual C++ 工具集
为什么80%的码农都做不了架构师?>>> Visual C++ 包含可用于创建 apps 在 32 位上运行,64 位,或基于 ARM 的 windows 操作系统的编译器. ...
- 【C/C++】VS的cl命令 | 配置环境变量 | 使用命令行编译C/C++程序
文章目录 一.前言 二.准备 三.配置环境变量 1. 逐步配置 2. 一步到位 四.语法 更多文章 一.前言 作为一个C++ (C语言) 程序员,VS可谓是编写代码的神器(天下第一IDE!).但是它的 ...
- 命令行编译工具NMAKE
简介 大家已经习惯于微软提供的功能强大的IDE,已经很少考虑手动编连项目了,所谓技多不压身,有空的时候还是随我一块了解一下命令行编译. C/C++/VC++程序员或有Unix/Linux编程经验应该很 ...
- VC6命令行编译配置
对于大多数在windows上写windows C/C++应用程序的人可能用的都是微软提供的VC++6.0或Visual Studio集成开发环境,但是对想为了更好地理解程序编译链接过程和习惯如linu ...
- VisualStudio 命令行编译 build 通过 rebuild 不通过
在使用命令行编译项目,发现使用 build 可以编译通过,但是通过 rebuild 编译提示找不到项目,明明在对应的文件夹存在项目输出的 dll 文件,但是会提示找不到 在命令行编译的 build 和 ...
- windows下的命令行工具babun
Babun 可以直接在winodows下面编译linux代码 但是本人只成功编译过个个go的linux 和 C的linux,C++的编译不出来东西 安装很简单,下下来,直接双击批处理 install ...
- 命令行编译运行CSharp文件
命令行编译运行CSharp文件 找到csc.exe所在的路径.如我本机上为"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" 在环境变量 ...
最新文章
- Linux下新增的代码放哪儿,linux – 如何在QEMU源代码中添加新设备?
- windows无法远程
- uwsgi基础——最佳实践和问题
- linux添加静态网关route文件,详解Linux系统中配置静态路由的方法
- 解决: -bash: $‘\302\240docker‘: command not found
- Java和C长期霸权结束
- Java 下一代: Groovy、Scala 和 Clojure
- 【php写日志】php将日志写入文件
- CentOS 6.6 HAProxy安装配置指南
- 使用计时器setInterval实现倒计时
- 服务器硬盘一直亮红灯怎么回事,请问:电脑的硬盘为何一直亮着红灯?且硬盘很 – 手机爱问...
- 五种百度云盘下载速度慢解决方法
- 机器学习之CART树
- 黑苹果开启——HiDPI 技术
- .c文件如何一步步变成.exe文件
- 李宏毅学习笔记43.More about Domain Adaptation. Part II. Applications
- VMware Tanzu Kubernetes 发行版部署尝鲜
- golang不编译.html,Golang 编译 条件编译
- Java OOP 6 异常
- 200瓦PFC方案 200瓦pfc控制器方案,采用ucc28019a全套图纸
热门文章
- Python+pandas计算数据相关系数(person、Kendall、spearman)
- WIN10python3.7配置MaskRCNN环境及demo测试(tensorflow-gpu1.x)
- 工作后,拉开你和同龄人差距的,不是出身,不是努力,而是……
- h5在线浏览word_怎样将PDF在线转换成Word?教你成为一个高手的方法
- R语言ggplot2可视化:可视化箱图、在箱图中添加抖动数据点(Dot + Box Plot)、自定义抖动数据点的大小、颜色、数据点分布在箱图中间、添加主标题、副标题、题注信息
- pandas使用groupby.first函数、groupby.nth(0)函数获取每个组中的第一个值实战:groupby.first函数和groupby.nth函数对比(对待NaN的差异)
- R语言ggplot2可视化:将dataframe和数据列名称传递给函数通过函数进行ggplot2可视化输出
- R语言数据描述性统计(Descriptive statistics)实战:数据全局描述信息、数值数据的描述性统计(Numerical data)、离散型数据的描述性统计(Categorical)
- Python使用matplotlib绘图并去除颜色样条colorbar实战:remove colorbar from figure in matplotlib
- R构建KNN多分类模型