vc与dev-c++混合编程 动态链接库c函数调用

2023-05-16

上回书说道,如何在vc中使用dev-c++中的类,这次说一个更简单的问题,如何实现vc调用dev-c++的函数。

1、打开dev-c++,新建工程,选择dll,输入工程名testdll,选择c工程,完成后,模板工程生成了两个文件,dll.h 和 dllmain.c,先进行编译,生成libtestdll.a和testdll.dll。

#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */


DLLIMPORT void HelloWorld (void);


#endif /* _DLL_H_ */

2、打开vs2010,当然vc6、vs2005、vs2008也应该一样。新建一个对话框工程,在对话框设计图上双击“OK”按钮,生成“OK”响应代码,手工添加代码“HelloWorld();”。在stdafx.h中,添加:#include “dll.h”,然后设置工程属性,主要是设置包含路径和库路径。(Dev-c++缺省把所有东西都放到同一个目录里了)。只是使用F7生成,编译应该没有问题,链接时会出现TestPrjDlg.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) void __cdecl HelloWorld(void)" (__imp_?HelloWorld@@YAXXZ),该符号在函数 "public: void __thiscall CTestPrjDlg::OnBnClickedOk(void)" (?OnBnClickedOk@CTestPrjDlg@@QAEXXZ) 中被引用
1>../TestDll/TestPrj.exe : fatal error LNK1120: 1 个无法解析的外部命令。

 

下面,我们一步步的来修改vc工程与dev-c++工程,使得vc程序能够调用dev-c++的dll库。

1、修改dll.h,如下所示,(蓝色为添加部分),修改以后重新生成。

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport) __stdcall
#else /* Not BUILDING_DLL */
# define DLLIMPORT extern "C" __declspec (dllimport)
#endif /* Not BUILDING_DLL */

 2、生成lib文件,(.a文件与.lib文件格式是不同的,但是在vs2010中,附件库直接采用.a我也成功过)。

第一种办法:采用vs的lib.exe工具生成lib。首先,打开libtestdll.def,在exports前输入:LIBRARY “TestDll”,然后在命令行中进入 testdll目录,执行如下命令:

lib   /machine:i386   /def:libtestdll.def

将会生成libtestdll.lib文件。这里的Library主要是指要链接到的库,如果不加这行,默认为libtestdll.dll,最后在运行testprj.exe时会提示找不到libtestdll.dll库。

第二种办法,使用dumpbin.exe工具生成.def文件,这个稍微麻烦一些,也是在命令行下输入:

DUMPBIN testdll.dll /EXPORTS /OUT:libtestdll.def

生成后,里面的行数比较多,手工将输出函数之外的内容全部删除,然后,同上,手工添加:Library等。

最后,在vs2010的工程附加库中指定libtestdll.lib,去除最初使用的libtestdll.a文件。

3、修改testprj工程属性,函数调用方式为:stdcall (缺省为 cdecl)。

4、重新生成testprj工程,运行后点击OK,弹出“Hello World From Dll!”,是不是成功了呢?

5、再给HelloWorld()函数添加两个参数,试试,一样成功,完美了!

 

说明:转来的那篇文章里,说的是在vc下,如何采用显示调用的方式,也就是通过LoadLibrary()和GetProcessAddress()来实现,我在尝试的过程中,如果函数没有参数,还不会有问题,有参数时,老是会出现堆栈平衡的问题,也就是那个检查esp的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vc与dev-c++混合编程 动态链接库c函数调用 的相关文章

  • org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException

    问题描述 xff1a 1 在application yml文件里的注释乱码 2 idea编辑器提示这个文件被错误的编码UTF 8加载 xff0c 并提示重新使用GBK加载等等 3 项目启动报错 xff1a java nio charset
  • 解决java.lang.IllegalStateException: Cannot call sendError() after the response has been committe

    错误截图 xff1a 错误代码 xff1a 错误原因 xff1a 输出流关闭之后 xff0c socket也已经关闭 xff0c 不能再次发送response xff0c 所以导致错误的就是return的返回值信息 xff0c 这时候把re
  • Object转成JSONObject

    object转jsonObject的时候经常会因为符号报错 xff0c 类似于 xff1a span class token function expect span at span class token number 0 span ac
  • Comparison method violates its general contract!null

    span class token annotation punctuation 64 Override span span class token keyword public span span class token keyword i
  • bigDecimal存到数据库后变成0

    检查数据库该字段 xff0c 小数点栏是不是默认为0了 xff0c 像这样 xff1a 如果是 xff0c 就改成你需要该字段保留的小数点后位数 xff0c 比如你要保留两位 xff0c 这一栏就改成2
  • [教程] 中兴光猫f477V2改固话桥接,支持电脑、手机SIP APP拨打

    坐标北京 联通免费开通固话 xff0c 新给的光猫是比较新的型号中兴F477V2 光猫本身支持voip xff0c 买个最普通的座机接到phone口就可以用了 xff0c 固话号码是01082xxxxxxx打头的 xff0c 资费市内0 1
  • PVE安装笔记

    PVE新安装 1 安装 iso准备 xff0c 系统盘目录有6 2的iso xff0c 挺好用 准备一个U盘 xff0c 最好是usb2 0的 xff0c 用ultraiso写入硬盘镜像 xff0c 注意选择raw格式 xff08 非常重要
  • pve 6.2增加CPU温度显示

    1 安装PVE xff0c 建议用refus烧录U盘 xff0c 记得选DD镜像模式 2 iso文件名 proxmox ve 6 2 1 iso 3 安装 4 替换如下文件中相关字段 具体参考上传文件pve主页添加温度显示 6 2 zip
  • VC++工程头文件重复和循环引用

    复杂工程中头文件众多 xff0c 很容易发生包含顺序 重复引用以及循环引用导致的编译链接错误 xff01 最近整理工程中文件引用时遇到不少这方面的问题 xff01 一般来说 xff0c 包含顺序问题会导致某些类型 函数等无定义 xff0c
  • PyQt+界面防卡死+selenium+多进程爬取图片一次打通!

    创建MyUrl py 编写爬取图片代码 爬取图片 xff0c 实际上就是对网页信息的读取 而selenium可以很好的做到这一点 xff0c 相对于beautifulsoup只能爬取静态前端源码的缺点 xff0c selenium可以解析由
  • LDAP应用篇(1)CentOS8接入登录

    LDAP应用篇 xff08 1 xff09 CentOS8接入登录 相比于服务器端的配置 xff0c 做为客户端接入LDAP的文章和资料就多了许多 能看到的文章都介绍了使用 authconfig 或者 authconfig tui xff0
  • MySQL OCP888题解031-使用X509加密连接

    文章目录 1 原题1 1 英文原题1 2 中文翻译1 3 答案 2 题目解析2 1 题干解析2 2 选项解析 3 知识点3 1 知识点1 xff1a X509 X 509 3 2 知识点2 xff1a 创建需要X509加密的账户 CREAT
  • 【PIL】验证码验证

    import random from PIL import Image ImageDraw ImageFont ImageFilter 图片的写文本的基础使用 img 61 Image new mode 61 34 RGB 34 size
  • 解决80端口被占用的问题

    先前在安装warmpsever的时候 xff0c 图标颜色总是橘黄色的不正常状态 xff0c 弹出系统错误提示框 xff1a 无法启动此程序 xff0c 因为计算机中丢失 MSVCR110 dll 尝试重新安装该程序以解决此问题 百度了一下
  • 《Python程序设计(第3版)》配套教学大纲

    配套教材 xff1a Python程序设计 xff08 第3版 xff09 xff0c xff08 ISBN xff1a 978 7 302 55083 9 xff09 xff0c 董付国 xff0c 清华大学出版社 xff0c 2020年
  • ROS学习番外篇11—Winows的WSL2(Linux子系统)下安装ROS并搭建开发环境

    一般ROS的开发是在Ubuntu下面进行的 自从今年6月份微软为WSL装配上了gui神器之后 我们又多出了一种新的玩法 那就是在Windows下用WSL2来安装Ubuntu虚拟机来做ROS的开发 虽然可能有老哥要说 之前搞个虚拟机不也一样
  • 数据结构5 栈和队列

    1 1 分数 2 作者 DS课程组单位 浙江大学 Run the following operations on a stack S Push S 1 Push S 2 Pop S Push S 3 Pop S Pop S The outp
  • git命令之快速搭建远程仓库

    首先使用系统管理员账号登录远程服务器 xff0c 具体步骤如下所示 xff1a 1 安装git应用程序 sudo apt get install git 2 创建git用户组和git用户 xff0c 具体命令如下所示 xff1a group
  • AM5728(AM5708)开发实战之使能u-boot看门狗

    一 看门狗介绍 为了使嵌入式系统能够在异常情况下自动复位 xff0c 一般需要引入看门狗 看门狗可以分为如下几类 xff1a 1 CPU自带的看门狗模块 优点 xff1a 可以灵活配置溢出时间 xff0c 可以随时禁用 缺点 xff1a 需
  • AM5728(AM5708)开发实战之调试DP83822 LED

    一 LED寄存器分析 MLEDCR即Multi LED Control Register 地址为0x0025 MLEDCR 1 0 设置MLED路由功能 具体如下所示 0x00表示MLED功能路由到COL PIN29 0x03表示MLED功

随机推荐

  • AM5728(AM5708)开发实战之移植OpenCV-3.4.11

    一 概述 OpenCV是一个开源的跨平台计算机视觉库 xff0c 可以运行在Linux Windows Mac OS等操作系统上 xff0c 它为图像处理 模式识别 三维重建 物体跟踪 机器学习提供了丰富的算法 由于OpenCV依赖包特别多
  • 国外大神深度评测Firefly-RK3399 Android8.1固件

    国外大神深度评测Firefly RK3399 Android8 1固件 Review of Firefly RK3399 Board with Android 8 1 Firmware 内容详细介绍了组装Firefly RK3399 xff
  • 设备树之I2C和SPI实例

    I2C实例 clock frequency i2c总线频率 xff0c 常用值有100000 xff0c 400000 address cells 该属性值必须为1 size cells 该属性值必须为0 i2c具体实例如下图所示 xff1
  • 设备树之GPIO和中断实例

    概述 设备树不仅仅描述常规硬件信息 xff0c 还可以描述中断 xff0c GPIO xff0c DMA xff0c PINCTRL xff0c 时钟 xff0c 电源管理等内核基础设施信息及其使用情况 xff0c 下面重点介绍中断 xff
  • 设备树之HDMI输出实例

    一 HDMI输出实例详解 图1 图2 图3 图1 xff0c 图2和图3构成了一个典型的HDMI输出链路 图1 xff1a HDMI接口设备结点 xff0c 该HDMI接口使用TYPE A接口 注意 xff1a HDMI接口结点名称为con
  • 设备树之MMC总线实例

    MMC总线重要属性 address cells 61 lt 1 gt 该属性值必须为1 size cells 61 lt 0 gt 该属性值必须为0 max frequency mmc总线最大时钟频率 bus width mmc总线位宽 x
  • Coursera计算概论A(李戈)教授课程

    昨天 xff08 4月29日 xff09 结束了 计算概论A的课程 xff0c 我对C语言有了更多的了解 这部课程算是我踏入程序设计领域的一个敲门砖吧 对C程序语言的理解 xff1a C语言简单 高效 易懂 xff0c 重点在于 1 结构
  • linux 命令行报bash command not found的解决办法

    命令行报bash command not found的解决办法 xff08 几乎所有命令 xff09 命令行输入命令执行后报 bash command not found 这是由于 系统PATH设置问题 xff0c PATH没有设置对 xf
  • cprintf函数调用到屏幕(cga)输出流程分析

    本文所有代码均为JOS内核源代码 xff0c 可以从MIT 6 828课程网站下载 概述 xff1a 所有向屏幕输出的过程 xff0c 一定是经过参数处理 xff0c 最后组织成一个字符数组 BUFFER xff0c 这个数组 xff08
  • laravel API 接受PUT请求Content-Type:application/x-www-form-urlencoded

    微信小程序 xff1a wx request url https m sybmfw cn api ys user 43 openid method put data that data formdata header content typ
  • 咕咕东的奇妙序列

    题意 xff1a 咕咕东 正在上可怕的复变函数 xff0c 但对于稳拿A Plus的 咕咕东 来说 xff0c 她早已不再听课 xff0c 此时她在睡梦中 突然想到了一个奇怪的无限序列 xff1a 112123123412345 这个序列由
  • w15作业--ZJM 与霍格沃兹(必做)

    题意 xff1a ZJM 为了准备霍格沃兹的期末考试 xff0c 决心背魔咒词典 xff0c 一举拿下咒语翻译题 题库格式 xff1a 魔咒 对应功能 背完题库后 xff0c ZJM 开始刷题 xff0c 现共有 N 道题 xff0c 每道
  • 实现WSL2固定IP效果+开机启动

    重启wsl2的发行版后 xff0c 系统分配给发行版的ip每次都不同 想要远程ssh过来或者运行其他需要外部访问的任务时 xff0c windows不知道要把端口转发给哪个ip 解决思路 启动wsl2后 xff0c 运行一个脚本 xff0c
  • Windows连接不上linux虚拟机的问题排查

    Windows连接不上虚拟机的问题排查 今天使用windows连接VMware上安装的linux虚拟机 xff0c 一直连接不上 xff0c 最后花了两个小时才解决了问题 xff0c 这里记录一下 xff0c 供日后参考 说明一下 xff0
  • UE4编写H5遇到的问题

    UE4自从4 16之后 xff0c 就采用emscripten技术进行h5编译 xff0c 游戏H5运行的过程中 xff0c 遇到这么一个问题 xff0c 记录一下 xff1a 数据服务器是一个独立的网站 xff0c 地址为 xff1a h
  • UE4开发HTML5遇到的问题

    最近要做一个基于UE4的HTML5仿真项目 xff0c 没真正做过HTML5的小白 xff0c 表示很无所畏惧 首先 xff0c 找一篇UE4下H5的教程 xff0c 简单学习一遍 xff1a 安装 xff0c 环境 xff0c 项目配置
  • redis windows版本编译

    1 redis for windows 下载地址 xff1a https github com tporadowski redis 2 下载后解压 xff0c 用vs2019打开 redis version msvs RedisServer
  • Ubuntu子系统VcXsrv黑屏compiz (core)

    在windows10上安装图形化ubuntu桌面的步骤 xff1a 1 安装 windows 子系统 ubuntu 1 xff09 在启用或关闭Linux 的 Windows子系统 2 xff09 在Microsoft Store中搜索ub
  • 虚幻引擎5.1版本新增功能

    虚幻引擎5 1版本新增功能 虚幻引擎5 1现已发布 xff01 2022年11月15日 其他应用 功能 广播与实况活动 建筑 影视 模拟 汽车与运输 游戏 虚幻引擎5 1 虚拟制片 我们很高兴地宣布 xff0c 虚幻引擎5 1现已推出 在这
  • vc与dev-c++混合编程 动态链接库c函数调用

    上回书说道 xff0c 如何在vc中使用dev c 43 43 中的类 xff0c 这次说一个更简单的问题 xff0c 如何实现vc调用dev c 43 43 的函数 1 打开dev c 43 43 新建工程 xff0c 选择dll xff