VS2017编译c dll的方法-编译bsio

news2024/9/17 8:19:12

VS2017编译c dll 有三种方法

(1).h和.c文件函数增加 __declspec(dllexport)

(2)仅在.h函数添加__declspec(dllexport)

(3)使用.def文件,不用在.h和.c文件的函数前增加__declspec(dllexport)

如果是将已有的c文件编译成dll,推荐使用(3),减少对原始c文件的干预

如果要生成纯粹c dll,使用控制台程序,dll,空项目

 

解决error C1083: 无法打开包括文件: “sys/time.h”的问题_Valars的博客-CSDN博客_sys/time.h

无法打开源文件<sys/time.h>,但是用time.h编译就会出错,缺少gettimeofday()_L888666Q的博客-CSDN博客_sys/time.h

#ifdef WIN32
#include <windows.h>
#else
#include <sys/time.h>
#endif

Error LNK2001 无法解析的外部符号 的几种情况及解决办法_小驴的博客-CSDN博客_errorlnk2001无法解析的外部符号

查看DLL 及LIB 库导出函数方法_张十三的博客的博客-CSDN博客_查看lib导出函数 

下面是采用def文件生成dll和lib文件,没有问题

D:\OceanMultiBeamProc\bin>dumpbin /exports oncrpc.dll
Microsoft (R) COFF/PE Dumper Version 14.10.25017.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file oncrpc.dll

File Type: DLL

  Section contains the following exports for oncrpc.dll

    00000000 characteristics
    63D870D6 time date stamp Tue Jan 31 09:37:26 2023
        0.00 version
           1 ordinal base
          89 number of functions
          89 number of names

    ordinal hint RVA      name

          1    0 000734C0 _null_auth = __null_auth
          2    1 000024F5 authnone_create = @ILT+5360(_authnone_create)
          3    2 00001AB9 authunix_create = @ILT+2740(_authunix_create)
          4    3 00003C42 authunix_create_default = @ILT+11325(_authunix_create_default)
          5    4 000035A3 bcmp = @ILT+9630(_bcmp)
          6    5 00002441 bcopy = @ILT+5180(_bcopy)
          7    6 00002BC1 bzero = @ILT+7100(_bzero)
          8    7 0000141A clnt_broadcast = @ILT+1045(_clnt_broadcast)
          9    8 00003788 clnt_create = @ILT+10115(_clnt_create)
         10    9 00001FAA clnt_pcreateerror = @ILT+4005(_clnt_pcreateerror)
         11    A 0000376A clnt_perrno = @ILT+10085(_clnt_perrno)
         12    B 00003774 clnt_perror = @ILT+10095(_clnt_perror)
         13    C 00002F77 clnt_spcreateerror = @ILT+8050(_clnt_spcreateerror)
         14    D 00002AF9 clnt_sperrno = @ILT+6900(_clnt_sperrno)
         15    E 00002B12 clnt_sperror = @ILT+6925(_clnt_sperror)
         16    F 00003EBD clntraw_create = @ILT+11960(_clntraw_create)
         17   10 00003D69 clnttcp_create = @ILT+11620(_clnttcp_create)
         18   11 00001AEB clntudp_bufcreate = @ILT+2790(_clntudp_bufcreate)
         19   12 00002077 clntudp_create = @ILT+4210(_clntudp_create)
         20   13 00003A26 get_myaddress = @ILT+10785(_get_myaddress)
         21   14 0000204A getrpcbyname = @ILT+4165(_getrpcbyname)
         22   15 00002D10 getrpcbynumber = @ILT+7435(_getrpcbynumber)
         23   16 00002518 getrpcent = @ILT+5395(_getrpcent)
         24   17 00001474 nt_rpc_report = @ILT+1135(_nt_rpc_report)
         25   18 00002F86 pmap_getmaps = @ILT+8065(_pmap_getmaps)
         26   19 000030A3 pmap_getport = @ILT+8350(_pmap_getport)
         27   1A 0000303F pmap_set = @ILT+8250(_pmap_set)
         28   1B 000018B1 pmap_unset = @ILT+2220(_pmap_unset)
         29   1C 000734B0 rpc_createerr = _rpc_createerr
         30   1D 00003E68 rpc_nt_exit = @ILT+11875(_rpc_nt_exit)
         31   1E 00003E72 rpc_nt_init = @ILT+11885(_rpc_nt_init)
         32   1F 00074AA0 svc_fdset = _svc_fdset
         33   20 000012D0 svc_getreq = @ILT+715(_svc_getreq)
         34   21 00001A69 svc_getreqset = @ILT+2660(_svc_getreqset)
         35   22 00003887 svc_register = @ILT+10370(_svc_register)
         36   23 000034DB svc_run = @ILT+9430(_svc_run)
         37   24 00001FBE svc_sendreply = @ILT+4025(_svc_sendreply)
         38   25 000020B3 svc_unregister = @ILT+4270(_svc_unregister)
         39   26 000038B4 svcerr_auth = @ILT+10415(_svcerr_auth)
         40   27 0000336E svcerr_decode = @ILT+9065(_svcerr_decode)
         41   28 000032B0 svcerr_noproc = @ILT+8875(_svcerr_noproc)
         42   29 000032C4 svcerr_noprog = @ILT+8895(_svcerr_noprog)
         43   2A 00001898 svcerr_progvers = @ILT+2195(_svcerr_progvers)
         44   2B 00002649 svcerr_systemerr = @ILT+5700(_svcerr_systemerr)
         45   2C 00003D0A svcerr_weakauth = @ILT+11525(_svcerr_weakauth)
         46   2D 0000332D svcraw_create = @ILT+9000(_svcraw_create)
         47   2E 000028BA svctcp_create = @ILT+6325(_svctcp_create)
         48   2F 0000245A svcudp_bufcreate = @ILT+5205(_svcudp_bufcreate)
         49   30 00003B16 svcudp_create = @ILT+11025(_svcudp_create)
         50   31 000016A4 xdr_array = @ILT+1695(_xdr_array)
         51   32 000020F9 xdr_authunix_parms = @ILT+4340(_xdr_authunix_parms)
         52   33 00002FBD xdr_bool = @ILT+8120(_xdr_bool)
         53   34 00001663 xdr_bytes = @ILT+1630(_xdr_bytes)
         54   35 00001465 xdr_callhdr = @ILT+1120(_xdr_callhdr)
         55   36 00001433 xdr_callmsg = @ILT+1070(_xdr_callmsg)
         56   37 00002FD6 xdr_char = @ILT+8145(_xdr_char)
         57   38 00003C2E xdr_des_block = @ILT+11305(_xdr_des_block)
         58   39 00001866 xdr_double = @ILT+2145(_xdr_double)
         59   3A 00002365 xdr_enum = @ILT+4960(_xdr_enum)
         60   3B 0000164F xdr_float = @ILT+1610(_xdr_float)
         61   3C 00002FEF xdr_free = @ILT+8170(_xdr_free)
         62   3D 00003512 xdr_int = @ILT+9485(_xdr_int)
         63   3E 00002FD1 xdr_long = @ILT+8140(_xdr_long)
         64   3F 000039A4 xdr_netobj = @ILT+10655(_xdr_netobj)
         65   40 00001979 xdr_opaque = @ILT+2420(_xdr_opaque)
         66   41 000031DE xdr_opaque_auth = @ILT+8665(_xdr_opaque_auth)
         67   42 00002833 xdr_pmap = @ILT+6190(_xdr_pmap)
         68   43 00003599 xdr_pmaplist = @ILT+9620(_xdr_pmaplist)
         69   44 000022E8 xdr_pointer = @ILT+4835(_xdr_pointer)
         70   45 00002F68 xdr_reference = @ILT+8035(_xdr_reference)
         71   46 000035B7 xdr_replymsg = @ILT+9650(_xdr_replymsg)
         72   47 00001D16 xdr_short = @ILT+3345(_xdr_short)
         73   48 00002CC5 xdr_string = @ILT+7360(_xdr_string)
         74   49 000019B5 xdr_u_char = @ILT+2480(_xdr_u_char)
         75   4A 00001CE9 xdr_u_int = @ILT+3300(_xdr_u_int)
         76   4B 00001992 xdr_u_long = @ILT+2445(_xdr_u_long)
         77   4C 00002310 xdr_u_short = @ILT+4875(_xdr_u_short)
         78   4D 00003DEB xdr_union = @ILT+11750(_xdr_union)
         79   4E 000019AB xdr_vector = @ILT+2470(_xdr_vector)
         80   4F 00002B8F xdr_void = @ILT+7050(_xdr_void)
         81   50 00003EB8 xdr_wrapstring = @ILT+11955(_xdr_wrapstring)
         82   51 0000241E xdrmem_create = @ILT+5145(_xdrmem_create)
         83   52 00001D66 xdrrec_create = @ILT+3425(_xdrrec_create)
         84   53 00001A46 xdrrec_endofrecord = @ILT+2625(_xdrrec_endofrecord)
         85   54 00003A3A xdrrec_eof = @ILT+10805(_xdrrec_eof)
         86   55 00003175 xdrrec_skiprecord = @ILT+8560(_xdrrec_skiprecord)
         87   56 0000114F xdrstdio_create = @ILT+330(_xdrstdio_create)
         88   57 000016E5 xprt_register = @ILT+1760(_xprt_register)
         89   58 00002DB0 xprt_unregister = @ILT+7595(_xprt_unregister)

  Summary

        1000 .00cfg
        3000 .data
        1000 .idata
        D000 .rdata
        3000 .reloc
        1000 .rsrc
       64000 .text

如果想使用与源文件中定义的不一样的函数名,可以按照以下语法:entryname=internalname
其中,entryname是要导出的符号名,而internalname是DLL中将要导出的函数名。

D:\OceanMultiBeamProc\oncrpc\win32\bin>dumpbin /exports oncrpc.lib
Microsoft (R) COFF/PE Dumper Version 14.10.25017.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file oncrpc.lib

File Type: LIBRARY

     Exports

       ordinal    name

                  __null_auth
                  _authnone_create
                  _authunix_create
                  _authunix_create_default
                  _bcmp
                  _bcopy
                  _bzero
                  _clnt_broadcast
                  _clnt_create
                  _clnt_pcreateerror
                  _clnt_perrno
                  _clnt_perror
                  _clnt_spcreateerror
                  _clnt_sperrno
                  _clnt_sperror
                  _clntraw_create
                  _clnttcp_create
                  _clntudp_bufcreate
                  _clntudp_create
                  _get_myaddress
                  _getrpcbyname
                  _getrpcbynumber
                  _getrpcent
                  _nt_rpc_report
                  _pmap_getmaps
                  _pmap_getport
                  _pmap_set
                  _pmap_unset
                  _rpc_createerr
                  _rpc_nt_exit
                  _rpc_nt_init
                  _svc_fdset
                  _svc_getreq
                  _svc_getreqset
                  _svc_register
                  _svc_run
                  _svc_sendreply
                  _svc_unregister
                  _svcerr_auth
                  _svcerr_decode
                  _svcerr_noproc
                  _svcerr_noprog
                  _svcerr_progvers
                  _svcerr_systemerr
                  _svcerr_weakauth
                  _svcraw_create
                  _svctcp_create
                  _svcudp_bufcreate
                  _svcudp_create
                  _xdr_array
                  _xdr_authunix_parms
                  _xdr_bool
                  _xdr_bytes
                  _xdr_callhdr
                  _xdr_callmsg
                  _xdr_char
                  _xdr_des_block
                  _xdr_double
                  _xdr_enum
                  _xdr_float
                  _xdr_free
                  _xdr_int
                  _xdr_long
                  _xdr_netobj
                  _xdr_opaque
                  _xdr_opaque_auth
                  _xdr_pmap
                  _xdr_pmaplist
                  _xdr_pointer
                  _xdr_reference
                  _xdr_replymsg
                  _xdr_short
                  _xdr_string
                  _xdr_u_char
                  _xdr_u_int
                  _xdr_u_long
                  _xdr_u_short
                  _xdr_union
                  _xdr_vector
                  _xdr_void
                  _xdr_wrapstring
                  _xdrmem_create
                  _xdrrec_create
                  _xdrrec_endofrecord
                  _xdrrec_eof
                  _xdrrec_skiprecord
                  _xdrstdio_create
                  _xprt_register
                  _xprt_unregister

  Summary

          C0 .debug$S
          14 .idata$2
          14 .idata$3
           4 .idata$4
           4 .idata$5
           C .idata$6

调用dll两个方法,静态调用和动态调用

静态调用,不能解决动态调用的问题,但是由于与dll配套使用,可以解决,让exe文件变小

C/C++:Windows编程—调用DLL程序的2种方法_重庆李四的博客-CSDN博客_windows c调用dll

add.h

#pragma once
int  add(int n1, int n2);

add.c

#include "add.h"
int  add(int n1, int n2)
{
    return n1 + n2;
}

add.def

LIBRARY
EXPORTS
add

testadd.c

#include <stdio.h>

下面这两行,可不写

#pragma comment(lib,"add.lib")

 int add(int a, int b);

 int main(char argc, char* argv[])
 {
     int a = add(1, 2);
     printf("%d", a);
     return 0;
 }

但是在生成bsio.dll的过程种,总是报如下错误:

Error LNK2001 无法解析的外部符号,比如xdr_double

实际上oncrpc.lib和oncrpc.dll的函数名都有这个,实在是让人费解。

后来用Debug版生成bsio.dll,发现了一个错误,oncrpc.dll是32位平台生成的,于是用x64平台再重新生成一遍,再加载oncrpc模块,就没有问题,至此,bsio.dll模块就生成了。

参考文献

VS2017 编写 C++ DLL 给 易语言,C++,C#等第三方调用_YNStong的博客-CSDN博客_visual studio c++dll生成给易语言调用

创建和使用动态库 使用def文件_qianpeng4的博客-CSDN博客

使用模块定义文件(.def)文件生成dll_麻子来了的博客-CSDN博客

vs2017生成C++/C语言的DLL以及调用 极简讲解 秒懂_萌面刺客的博客-CSDN博客

VS2017——C语言dll编译并调用_baijian1989的博客-CSDN博客_c函数编译成dll并调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构初阶】顺序表的实现(文末附原码)

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;数据结构初阶 ⭐代码仓库&#xff1a;Data Structure 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff…

基于C讲解协程设计原理

协程设计原理 背景 以epoll处理fd为例&#xff1a; func () {while (1) {epoll_wait();for(;;) {recv();send();}} }在IO操作较为密集的情况下&#xff08;网络IO和磁盘IO操作多&#xff0c;CPU计算少&#xff09;&#xff0c;由于检测到IO事件后&#xff0c;需要进行同步的…

美颜sdk动态贴纸是什么?

美颜sdk如今已经成了广大视频拍摄平台的刚需&#xff0c;用户们也习惯了这种新颖的拍摄形式&#xff0c;原相机被无情“打入冷宫”&#xff0c;特别是短视频和直播平台中&#xff0c;绝大部分用户都在使用美颜sdk的趣味功能进行拍摄&#xff0c;“动态贴纸”就是一个非常好的例…

什么是PEPPOL BIS?

和常见的X12以及EDIFACT类似&#xff0c;PEPPOL BIS也是一种EDI标准&#xff0c;主要用于B2G和B2B交易&#xff0c;在欧盟的应用十分广泛。在业务场景中&#xff0c;PEPPOL不单单只是用于发票&#xff0c;从下单到开票流程中均可提供标准化的数据传输。 在此前的文章中&#x…

[Ansible系列]ansible tag介绍

简介 在大型项目当中&#xff0c;通常一个playbook会有非常多的task。而我们每次执行这个playbook时&#xff0c;都会将 所有task运行一遍。而事实上&#xff0c;在实际使用过程中&#xff0c;我们可能只是想要执行其中的一部分任务而已&#xff0c; 并不想把整个playbook完整跑…

【单链表】数据结构单链表的实现

前言&#xff1a;在之前的学习中我们已经了解了顺序表的相关知识内容&#xff0c;但是顺序表我们通过思考可以想到如下问题&#xff1a; 中间/头部的插入删除&#xff0c;时间复杂度为O(N)增容需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间。会有不小的消耗。增容…

性能技术分享|Jmeter+InfluxDB+Grafana搭建性能平台

一、引言最近在公司做性能技术分享时&#xff0c;发现同事对环境搭建能力&#xff0c;还是有些欠缺。或许&#xff0c;这也是大部分性能测试工程师所欠缺的技能。因为绝大部分的性能测试工程师&#xff0c;要么是使用测试开发架构师搭建的性能平台&#xff0c;要么自己使用Jmet…

【Unity3D】激光灯、碰撞特效

1 需求描述 本文将模拟激光灯&#xff08;或碰撞&#xff09;特效&#xff0c;详细需求如下&#xff1a; 从鼠标位置发射屏幕射线&#xff0c;检测是否与物体发生碰撞当与物体发生碰撞时&#xff0c;在物体表面覆盖一层激光灯&#xff08;或碰撞&#xff09;特效本文代码见→激…

振弦采集模块VMTool 配置工具的传感器数据读取

振弦采集模块VMTool 配置工具的传感器数据读取 连接传感器 将振弦传感器两根线圈引线分别连接到 VM 模块模块的 SEN和 SEN-两个管脚。 通常不分正负极&#xff0c;任意连接即可。 连接模块电源 使用 5V~12V 直流电源连接到 VM 模块的 VIN 和 GND&#xff0c;电源正极连接到 VIN…

【数据结构基础】树 - 平衡二叉树(AVL)

平衡二叉树&#xff08;Balanced Binary Tree&#xff09;具有以下性质&#xff1a;它是一棵空树或它的左右两个子树的高度差的绝对值不超过1&#xff0c;并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 最小二叉平…

数学建模与数据分析 || 1. 数学建模简介

数学建模简介 文章目录数学建模简介1. 数学建模比赛的理解2. 一般数据分析的流程3. 机器学习与统计数据分析4. 各种编程软件仅仅是工具&#xff0c;对问题的观察视角和解决问题的策略才是关键2.1 数学建模的特点2.2 以 python&#xff08;jupyter notebook工作界面&#xff09;…

JSR303校验(表单参数校验)

1、maven坐标<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId><version>3.0.1</version> </dependency>2、校验规则3、定义好校验规则还需要开启校验&#…

用户区网络缓冲区

用户区网络缓冲区 为什么要有用户层缓冲区 TCP内核协议栈&#xff0c;每个连接都有一个接收缓冲区和一个发送缓冲区&#xff0c;为啥用户层也要有&#xff1a; 为啥要有接收缓冲区 生产者速度大于消费者速度&#xff1a;客户端发送地太快&#xff0c;服务器处理不过来&#…

SpringWebflux 执行流程和核心 API

SpringWebflux 基于 Reactor&#xff0c;默认使用容器是 Netty&#xff0c;Netty 是高性能的 NIO 框架&#xff0c;异步非阻 塞的框架 Netty_百度百科 (baidu.com)BIO、NIO、AIO_y_凉介的博客-CSDN博客_bin nio &#xff08;1&#xff09;Netty BIO 每一个请求过来会占用一个…

【系列05】类与对象 面向对象 封装继承多态 类 内部类

面向对象&#x1f601; 文章为本人随课程记录笔记形成 跟随老师"秦疆&#xff08;遇见狂神说)" 非常欢迎大家在文章下面留言评论互相交流,也欢迎大家有问题可以联系本人或者本人公众号 &#x1f609;学思则安 参考课程https://www.kuangstudy.com/course?cid1 有问…

Vue3通透教程【一】Vue3现状—必然趋势?

文章目录&#x1f31f; 专栏介绍&#x1f31f; Vue默认版本&#x1f31f; 拥抱Vue3的UI&#x1f31f; Vue3显著优势&#x1f31f; 专栏介绍 凉哥作为 Vue 的忠诚粉丝输出过大量的 Vue 文章&#xff0c;应粉丝要求开始更新 Vue3 的相关技术文章&#xff0c;Vue 框架目前的地位大…

现在什么款式运动无线耳机好、最适合运动的无线蓝牙耳机推荐

随着经济越来越好&#xff0c;人们的生活质量提高&#xff0c;我们对健康也是更加重视了。越来越多人开始“动起来”。健康运动&#xff0c;自然少不了专业的运动耳机。一副适合的运动耳机对我们锻炼身体有着事半功倍的作用&#xff0c;那么有哪些品牌值得推荐呢&#xff1f;小…

论文笔记(1):Large Language Models are few(1)-shot Table Reasoners

文章目录AbstractIntroductionRelated worksMethodExperimentdatasetbaselinesresultsmain resultsanalysisLimitationAbstract 已有研究表明&#xff0c;大型语言模型(LLM)在文本的少样本推理中表现excellent&#xff0c;本文证明LLM在表结构的f复杂少样本推理中表现也很comp…

【数据结构基础】树 - 二叉搜索树(BST)

本文主要介绍 二叉树中最基本的二叉查找树&#xff08;Binary Search Tree&#xff09;&#xff0c;&#xff08;又&#xff1a;二叉搜索树&#xff0c;二叉排序树&#xff09;它或者是一棵空树&#xff0c;或者是具有下列性质的二叉树&#xff1a; 若它的左子树不空&#xff0…

入门力扣自学笔记233 C++ (题目编号:2319)

2319. 判断矩阵是否是一个 X 矩阵 题目&#xff1a; 如果一个正方形矩阵满足下述 全部 条件&#xff0c;则称之为一个 X 矩阵 &#xff1a; 矩阵对角线上的所有元素都 不是 0 矩阵中所有其他元素都是 0 给你一个大小为 n x n 的二维整数数组 grid &#xff0c;表示一个正方形…