`

DLL和LIB的调用(C++和C#)

阅读更多

1. C++篇

dll(在被调用函数前加_delcspec(dllexport))在生成时会自动生成同名lib(包含dll中的符号链接),直接用dll称为显示调用(动态加载),用LoadLibrary和GetProcAddress;用包含lib的方式为隐式调用(需在调用函数前加_delcspec(dllimport)或extern声明,前者可获得更快的编译速度),编译时不需要对应dll,但运行时程序需要能找到该dll,通常放在debug目录下。可以用dumpbin工具查看dll中包含的函数(dumpbin -exports,但看不到函数原型),用depend工具查看程序的依赖项。为了方便二次开发,需在编写dll时提供一个包含函数原型的同名.h头文件(这样在dll实现程序中的函数原型前不用再加dllexport)。

为了调用和被调用端都可以使用该头文件,在源文件中加

#define DLL_API  _delcspec(dllexport)

#include "xx.h"

在xx.h头文件中加

#ifdef DLL_API

#else

#define DLL_API _delcspec(dllimport)

这样同一文件在两端将实现不同的展开

 

由于C++编译器在编译时会改变函数名,解决方法是

(1)在定义导出函数时加extern "C"(大写),可以解决C++和C语言相互调用问题,但只适合全局函数,不适合类的成员函数;

(2)声明函数时加_stdcall,但函数名仍有可能改变;

(3)使用def文件,强制输出使用的函数名

隐式调用在程序启动时把所需dll全部加载进内存,比较消耗资源。相应库的包含可在工程选项中设置。

 

注:以上主要归纳自 孙鑫《VC++深入详解》

 

QT中调用第三方静态库的方法是在pro里用INCLUDEPATH添加库对应的头文件,用LIBS添加库。

 

2. C#篇

C++的dll是二进制文件,而C#的是一种中间代码,可以添加引用后直接查看,很方便,程序里需using dll中包含的namespace。利用reflector工具可以更清楚的看到其依赖关系。

 

3. 互相调用篇

C++非托管,C#托管,应该是利用公共语言CLR,C#调用C++相对简单,也更有实际意义(利用之前的代码),C++调用C#需要在程序上做一些修改(因其语言存在差异性)

 

 

0
1
分享到:
评论

相关推荐

    C#Winform动态调用C++和C#的Dll

    演示c# 通过设置DLL文件 生成操作 为 嵌入的资源 后,DLL文件嵌入生成的EXE里,然后动态调用DLL,妈妈再也不用担心我找不到DLL文件了

    CVI调用VC编写的Dll文件.pdf

    详细介绍了使用VC++编写DLL lib 文件,以及对CVI调用的文件的过程,如有其他问题欢迎联系我。

    C#调用C++结构体开发

    1、用C++编写lib类库生成DLL文件 2、C#调用C++生成的DLL文件

    C# 调用c++ 库 参数为指针类型导出函数

    c# Csharp调用 c++库 参数为导入和导出指针两种 包含C++ DLL源码 如fun(cont char* A,char*B) A为输入参数,B为输出参数-C# CSharp call C++ DLL lib dll function param use export and import eg: fun(cont char*...

    C#封装C++DLL并调用

    硬件提供C++的DLL,实际应用是用C#开发的,可以是winform可以是webapi等,通过新建C++项目对DLL进行再次封装,并提供接口给C#程序使用。

    c++ 创建dll(动态库)、static lib(静态库),以及dll的相互调用 示例vs2022工程

    c++ 创建dll(动态库)、static lib(静态库),以及dll的相互调用 示例vs2022工程 sln项目文件在 c++_dll_staticLib\libtest\MathTestLib 目录下 以前有小错误,更新了错误(2023-05-28)

    VC++2015编译TA-Lib-Core.dll C#调用带macd调试程序

    VC++2015编译TA-Lib-Core.dll 包括 C#调用带macd调试程序

    C++/ C#生成dll 用C/C#/Python/Unity 调用

    VS2015工程里面通过c++生成静态库lib,C++生成dll用C++工程,python, unity调用对应的dll...C#生成 dll,通过C#和Unity工程调用对应的dll。Python使用的是VS中集成Python. Python调用C#dll时需要通过pip安装pythonnet.

    yolov5_tensorrt_dll c++动态链接库接口

    实际应用中,需要把生成的engine和推理程序给c#,java或者各种调用,可以把它写为一个对外的接口,供给别人使用。

    QT编写DLL调用示例 方法 参数 返回值 事件回调

    QT编写DLL给外部程序调用示例 方法 参数 返回值 事件回调 : 1:C#或者 NET 第一步:引入命名空间; using System Runtime InteropServices; 第二步:声明函数 必须与实际DLL中函数名及参数一致; [DllImport "qt...

    C#(.NET)开发USB通用库 USB Library.

    完全的通用USB开发库,完全的C#调用接口和帮助文档,本人开发USB上位机软件包时,发现都是非托管的C++调用库,C#调用库非常少。所以收集了这个,供用.NET方式开发USB的朋友使用。

    tesseract-OCR5.0编译好的全部文件.rar

    tesseract-OCR5.0编译好的全部文件’包括bin‘cmake’lib‘include文件夹。这个里面要调用的dll太多了,没有C#版的tesseract-OCR4.1.1好用,只要调用3个dll就可以了,所以我现在没有用这个,用的C#版的。

    JrtpLib接收端DLL

    把jrtplib的接收端的静态lib库封装成了动态dll库,方便c#调用。

    C++监控注册表源代码

    C++监控注册表源代码 包含,detours.lib(1.5版) 以及C#调用Dll的试验代码。

    WinRing0-v3.0.20-Source-ResDrv.rar-驱动从资源加载

    WinRing0再次升级版本,此次更新...支持静态lib方式调用(程序目录不再需要dll和sys文件),支持动态dll方式调用(程序目录不再存在sys文件)。压缩包包含WinRing0驱动源代码和两个实例demo源代码(一个C++和一个C#)。

    unity-cpp-lib:对Unity插件使用c ++库的简单演示

    另一方面,此存储库还显示了如何通过c#脚本在Unity中导入和使用库(DLL)。 如何使用回购 此仓库包含两个文件夹: SampleCppDll-Visual Studio Community 2017项目和C ++文件。 UnitySampleDll-一个利用...

    WinRing.dll WinRing0 is a hardware access library for Windows.

    你这个调用这个DLL直接访问WIN7 系统的硬件物理端口,测试支持X64系统,驱动通过微软签名认证。 第一次上传资料,如有错误和不足欢迎批评指正 How to Use Common Put WinRing0.dll, WinRing0x64.dll, WinRing0.sys,...

    固高GTS-VB运动控制卡编程手册1.4.rar

    (2) 将下载的动态链接库压缩包里VC文件夹中的动态链接库、头文件和lib文件复制到工程文件 夹中; 第 2 章 运动控制器函数库的使用 15 © 1999-2019 固高科技版权所有 (3) 选择“Project”菜单下的“Settings…”菜单...

    vc++ 开发实例源码包

    MFC+DLL的编写和调用示例 如题。 MFC换肤完全贴图实现 如题。 Smile简体版 很简单,只能播放mp3格式的音乐。 功能: --------------------------------------- --------关闭-- 打开----最小化------- ----------...

Global site tag (gtag.js) - Google Analytics