文章目录

  • 代码
  • 编译
  • 链接
  • 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

可以看到编译产生了dllexplibobj四个文件。

链接

然后链接:

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调用相关推荐

  1. msvc命令行编译静态库和动态库

    编写一个静态库 编写要打包为静态库的函数,内容如下: // jclib.cpp int func(int a, int b) {return a + b; } 在msvc开发人员命令提示符中执行 cl ...

  2. 如何用MSVC命令行编译 SQLite ?

    作者:cuicui 这个问题的关键是如何配置MSVC 工具:VS2017 要编译的sqlite3源代码从https://www.sqlite.org/download.html下载 官方说明中的方法是 ...

  3. 在命令行上启用 64 位 Visual C++ 工具集

    为什么80%的码农都做不了架构师?>>>    Visual C++ 包含可用于创建 apps 在 32 位上运行,64 位,或基于 ARM 的 windows 操作系统的编译器. ...

  4. 【C/C++】VS的cl命令 | 配置环境变量 | 使用命令行编译C/C++程序

    文章目录 一.前言 二.准备 三.配置环境变量 1. 逐步配置 2. 一步到位 四.语法 更多文章 一.前言 作为一个C++ (C语言) 程序员,VS可谓是编写代码的神器(天下第一IDE!).但是它的 ...

  5. 命令行编译工具NMAKE

    简介 大家已经习惯于微软提供的功能强大的IDE,已经很少考虑手动编连项目了,所谓技多不压身,有空的时候还是随我一块了解一下命令行编译. C/C++/VC++程序员或有Unix/Linux编程经验应该很 ...

  6. VC6命令行编译配置

    对于大多数在windows上写windows C/C++应用程序的人可能用的都是微软提供的VC++6.0或Visual Studio集成开发环境,但是对想为了更好地理解程序编译链接过程和习惯如linu ...

  7. VisualStudio 命令行编译 build 通过 rebuild 不通过

    在使用命令行编译项目,发现使用 build 可以编译通过,但是通过 rebuild 编译提示找不到项目,明明在对应的文件夹存在项目输出的 dll 文件,但是会提示找不到 在命令行编译的 build 和 ...

  8. windows下的命令行工具babun

    Babun 可以直接在winodows下面编译linux代码 但是本人只成功编译过个个go的linux 和 C的linux,C++的编译不出来东西 安装很简单,下下来,直接双击批处理 install ...

  9. 命令行编译运行CSharp文件

    命令行编译运行CSharp文件 找到csc.exe所在的路径.如我本机上为"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" 在环境变量 ...

最新文章

  1. Linux下新增的代码放哪儿,linux – 如何在QEMU源代码中添加新设备?
  2. windows无法远程
  3. uwsgi基础——最佳实践和问题
  4. linux添加静态网关route文件,详解Linux系统中配置静态路由的方法
  5. 解决: -bash: $‘\302\240docker‘: command not found
  6. Java和C长期霸权结束
  7. Java 下一代: Groovy、Scala 和 Clojure
  8. 【php写日志】php将日志写入文件
  9. CentOS 6.6 HAProxy安装配置指南
  10. 使用计时器setInterval实现倒计时
  11. 服务器硬盘一直亮红灯怎么回事,请问:电脑的硬盘为何一直亮着红灯?且硬盘很 – 手机爱问...
  12. 五种百度云盘下载速度慢解决方法
  13. 机器学习之CART树
  14. 黑苹果开启——HiDPI 技术
  15. .c文件如何一步步变成.exe文件
  16. 李宏毅学习笔记43.More about Domain Adaptation. Part II. Applications
  17. VMware Tanzu Kubernetes 发行版部署尝鲜
  18. golang不编译.html,Golang 编译 条件编译
  19. Java OOP 6 异常
  20. 200瓦PFC方案 200瓦pfc控制器方案,采用ucc28019a全套图纸

热门文章

  1. Python+pandas计算数据相关系数(person、Kendall、spearman)
  2. WIN10python3.7配置MaskRCNN环境及demo测试(tensorflow-gpu1.x)
  3. 工作后,拉开你和同龄人差距的,不是出身,不是努力,而是……
  4. h5在线浏览word_怎样将PDF在线转换成Word?教你成为一个高手的方法
  5. R语言ggplot2可视化:可视化箱图、在箱图中添加抖动数据点(Dot + Box Plot)、自定义抖动数据点的大小、颜色、数据点分布在箱图中间、添加主标题、副标题、题注信息
  6. pandas使用groupby.first函数、groupby.nth(0)函数获取每个组中的第一个值实战:groupby.first函数和groupby.nth函数对比(对待NaN的差异)
  7. R语言ggplot2可视化:将dataframe和数据列名称传递给函数通过函数进行ggplot2可视化输出
  8. R语言数据描述性统计(Descriptive statistics)实战:数据全局描述信息、数值数据的描述性统计(Numerical data)、离散型数据的描述性统计(Categorical)
  9. Python使用matplotlib绘图并去除颜色样条colorbar实战:remove colorbar from figure in matplotlib
  10. R构建KNN多分类模型