首页 > 编程语言 >C++实现dll文件的显示调用

C++实现dll文件的显示调用

时间:2024-05-28 18:58:22浏览次数:19  
标签:调用 int LIBRARY DLL add C++ MyLibrary dll MY

我们实现dll文件的显示调用,主要分为三个步骤:创建DLL、导出函数、使用DLL。其中离不开Windows API函数,使用到了LoadLibrary、GetProcAddress、 FreeLibrary等,以下是一个简单的示例程展示整个过程。:

1.创建DLL

MyLibrary.h

// MyLibrary.h
#ifndef MY_LIBRARY_H
#define MY_LIBRARY_H

#ifdef MY_LIBRARY_EXPORTS
#define MY_LIBRARY_API __declspec(dllexport)
#else
#define MY_LIBRARY_API __declspec(dllimport)
#endif

extern "C" {
    MY_LIBRARY_API int add(int a, int b);
}

#endif // MY_LIBRARY_H

 MyLibrary.cpp

// MyLibrary.cpp
#include "MyLibrary.h"

int add(int a, int b) {
    return a + b;
}

2. 使用DLL的程序

// main.cpp
#include <windows.h>
#include <iostream>

int main() {
    HINSTANCE hinstLib = LoadLibrary(TEXT("MyLibrary.dll")); 
    if (!hinstLib) {
        cerr << "Failed to load DLL: " << GetLastError() << endl;
        return 1;
    }

    using AddFunc = int(*)(int, int);
    AddFunc add = (AddFunc)GetProcAddress(hinstLib, "add");
    if (!add) {
       cerr << "Failed to get function address: " << GetLastError() << endl;
        FreeLibrary(hinstLib);
        return 1;
    }

    int result = add(4, 1);
    cout << "4+ 1 = " << result << std::endl;

    FreeLibrary(hinstLib);
    return 0;
}
 

注意:使用DLL的程序需要调用LoadLibrary加载DLL,GetProcAddress获取函数地址,使用完后通过FreeLibrary释放DLL。还有就是确保DLL的路径正确,无论是放在程序的同一目录下还是系统路径中,或者使用绝对路径加载。

标签:调用,int,LIBRARY,DLL,add,C++,MyLibrary,dll,MY
From: https://blog.csdn.net/qq_57661075/article/details/139202097

相关文章

  • C++跨平台库boost和Poco的编译
    PrerequisitesCMake3.5ornewerAC++17compiler(VisualC++2022,GCC8.0,Clang5,ornewer)在window下编译依赖的三方库编译POCO$gitclone-bmasterhttps://github.com/pocoproject/poco.git$cdpoco$mkdircmake-build$cdcmake-build$cmake..$cma......
  • 调用mybatisPlus的 Iservice中的save方法,后台日志打印出来Insert语句,但是没插入到数据
    问题:调用mybatisPlus的Iservice中的save方法,后台日志打印出来Insert语句,但是没插入到数据库表中;一共向两个表中插入数据;weather,向天气表中插入数据成功,但是在异步任务中向三方同步日志表中 third_request_log是只打印出了成功Insert语句和参数,但是实际未插入成功:代码如下:......
  • @Transactional(rollbackFor = Exception.class)注解的方法A,此方法A中插入成功,再调用
    当你在一个带有@Transactional注解的方法中插入数据成功,然后调用另一个方法(无论该方法是否也带有@Transactional注解),但发现第二个方法中的插入语句没有实际插入数据,但打印出了insert语句,这通常意味着事务没有按预期执行或事务被提前提交了。这里有几个可能的原因和解决方案:自......
  • C++17 链接 C++11 lib 出现重复定义
    C++11实现staticconstexpr是按照conststatic实现的,需要在.cpp中定义://tmp.hclassStatisTest{public:staticconstexprconstcharliteral[]="xxxliteral";};//tmp.cc#include"tmp.h"constcharStatisTest::literal[];//compile......
  • 阿赵UE引擎C++编程学习笔记——文件夹操作和文件读写
      大家好,我是阿赵。  这次学习一下在UE里面使用C++的API操作文件读写和文件夹操作。一、UE引擎获取相关路径  获取到路径一般是相对路径,使用FPaths::ConvertRelativePathToFull转换后,可以获得完整的绝对路径。FStringcontentDir=FPaths::ProjectContentDir();......
  • 《C++primer》第八章课后习题
    练习8.1istream&abc(istream&is){ strings; is>>s; cout<<s; s.clear(); returnis;}练习8.2abc(cin);练习8.3答:输入类型与i不符,或者输入结束标识练习8.4vector<string>s;voidabc(strings1){ strings2; ifstreamin(s1); while(getline(......
  • 《C++primer》读书笔记---第八章:IO库
    8.1IO类下表列出的是一些IO类型:  为了支持使用宽字符的语言,标准库定义了一组类型和对象来操纵wchar_t类型的数据。宽字符版本的类型和函数的名字以一个w开始,例如,wcin、wcout、wcerr是分别对应cin、cout、cerr的宽字符类型。注:IO对象无拷贝或赋值ofstreamout1,out2;......
  • .net core的WebAPI+Vue2实现调用设备拍照上传图片功能
    在工作中有时候会遇到上传文件上传图片或者拍照上传图片功能。这时候底下的内容就有可能可以帮助到你。后端的支持上传图片和上传文件功能。前端如果你选择普通上传功能就是普通上传功能,我这里选择的是调用相机设备实现拍照上传图片功能。1.首先这是后端的控制器接口。1///<......
  • pr找不到msvcr110.dll无法执行代码怎么解决?总结7个有效方法分享
    msvcr110.dll是MicrosoftVisualC++2012Redistributable的一个组成部分,这是一个动态链接库(DLL)文件。它主要用于存储许多程序共同使用的代码和资源,对于执行C++编写的应用程序极为关键。如何打开软件提示找不到msvcr110.dll或msvcr110.dll丢失,则可能意味着它已被误删或因......
  • C++二进制文件的读写
    二进制文件的读取:voidTransformSession::generateData(conststd::string&filePath,std::vector<uint8_t>&data){std::ifstreamifs(filePath,std::ios::binary);if(!ifs){SPDLOG_ERROR("failedtoopenreadfile:{}",filePath);......