首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从dll导出包含std :: objects(vector,map等)的类

从问答内容中,我们可以看到您想要了解如何从DLL中导出包含std::objects(如vectormap等)的类。为了帮助您更好地理解这个过程,我们将首先介绍一些基本概念,然后提供一个简单的示例。

基本概念

  1. DLL(Dynamic Link Library):DLL是一种在Windows操作系统上共享的、可动态加载的库文件。它允许多个应用程序同时访问相同的代码和数据,从而节省内存和提高性能。
  2. C++标准库:C++标准库包含许多有用的模板类和函数,如vectormap等。这些模板类和函数可以帮助开发人员更轻松地编写高效的代码。
  3. 导出类:要从DLL中导出一个包含std::objects的类,您需要在类定义前添加__declspec(dllexport),并在使用该类的项目中添加__declspec(dllimport)

示例

假设我们有一个名为MyLibrary的DLL项目,其中包含一个名为MyClass的类,该类使用了std::vectorstd::map

在DLL项目中

代码语言:cpp
复制
// MyClass.h
#pragma once

#include<vector>
#include <map>

class __declspec(dllexport) MyClass
{
public:
    std::vector<int> GetVector();
    std::map<int, std::string> GetMap();
};
代码语言:cpp
复制
// MyClass.cpp
#include "MyClass.h"

std::vector<int> MyClass::GetVector()
{
    std::vector<int> vec = {1, 2, 3};
    return vec;
}

std::map<int, std::string> MyClass::GetMap()
{
    std::map<int, std::string> myMap = {{1, "one"}, {2, "two"}, {3, "three"}};
    return myMap;
}

在使用MyClass的项目中

代码语言:cpp
复制
// main.cpp
#include<iostream>
#include "MyClass.h"

// 添加__declspec(dllimport)以导入MyClass
class __declspec(dllimport) MyClass
{
public:
    std::vector<int> GetVector();
    std::map<int, std::string> GetMap();
};

int main()
{
    MyClass myObj;
    std::vector<int> vec = myObj.GetVector();
    std::map<int, std::string> myMap = myObj.GetMap();

    for (int num : vec)
    {
        std::cout<< num<< std::endl;
    }

    for (const auto& [key, value] : myMap)
    {
        std::cout<< key << ": "<< value<< std::endl;
    }

    return 0;
}

通过以上示例,您可以了解如何从DLL中导出包含std::objects(如vectormap等)的类。请注意,此示例仅适用于Windows平台,并使用了C++标准库中的vectormap

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

手把手教你 封装DLL类 给客户端调用

前言 创建DLL有几种不同的方式,最简单直接的的方式就是通过VS自带的动态链接库(DLL)项目,把相关的功能封装成一个类,然后导出几个接口方法,编译成功以后生成DLL文件,就可以在其他地方跟正常的第三方库配置之后一样调用了...01 创建DLL 首先打开VS创建一个DLL空项目,打开VS的桌面向导如下: 创建DLL链接库项目 然后在头文件中添加mytest.h文件,添加代码如下: #pragma once #ifdef...封装了一个YOLOv8对象检测推理类为DLL,支持C++与C#接口调用。...客户端调用代码如下: #include "yolov8_infer.h" #include #include std::string label_map =...(pos + 1) std::endl; std::vectorstd::string> classNames; std::ifstream fp(label_map);

93030

手把手教你 封装YOLOv8推理位DLL 给客户端调用

创建DLL有几种不同的方式,最简单直接的的方式就是通过VS自带的动态链接库(DLL)项目,把相关的功能封装成一个类,然后导出几个接口方法,编译成功以后生成DLL文件,就可以在其他地方跟正常的第三方库配置之后一样调用了...01、创建DLL 首先打开VS创建一个DLL空项目,打开VS的桌面向导如下: 创建DLL链接库项目 然后在头文件中添加mytest.h文件,添加代码如下: #pragma once #ifdef _DLL_EXPORTS...YOLOv8对象检测推理类为DLL,支持C++与C#接口调用。...客户端调用代码如下: #include "yolov8_infer.h" #include #include std::string label_map =...(pos + 1) std::endl; std::vectorstd::string> classNames; std::ifstream fp(label_map);

1.7K10
  • javascript & c++ - v8pp 实现解析

    python 等的跨语言中间件来得简单, 从代码量上来说, v8pp 的代码量也远少于笔者之前剖析过的 pybind11....("math3d", math_module); 这里我们直接尝试向 v8 注册了一个 math3d 模块, 并在这个模块中导出了一个 Vector3 的类(三维矢量的简单实现), 并导出了Vector3...Vector3 对象, 这种情况如果不打开auto wrap objects, 我们将会得到一个 failed to wrap C++ object 的 std::runtime_error 异常....如示例代码中我们将 gbf::math 命名空间下的 Vector3 直接导出到了 math3d 模块中, 你可以选择 1:1 的方式还原 c++ 中的类结构, 也可以按照示例中一样, 通过 v8pp:...如果函数体包含return, 则返回return指定的对象到调用者, 否则直接返回最初构建的那个对象, 此处就是一开始从 prototype 构建的对象了.

    75121

    LNK2019:win32下编写DLL,应用程序找不到DLL接口函数的一种情况

    set_global_run_config@gdface@@YAX_N0@Z),该符号在函数 main 中被引用 令我感到奇怪的是,动态库导出的函数有好几个,只有这个函数报错,我打开生成的动态库导入文件...我仔细比较这个函数和其他函数的区别,发现那些能正常导出符号的函数在同一个cpp文件A中,只有这个问题函数在另一个cpp文件B中。...> // 动态库导入导出声明宏定义 #ifdef _WIN32 #ifdef DETECT_CL #define DETECT_CL_DLL_DECL __declspec(dllexport) #define...object_info_vector& convert_def(object_info_vector& objects, const gf_int2 &img_size); DETECT_CL_DLL_DECL...object_info_vector convert_def(const object_info_vector& objects, const gf_int2 &img_size); DETECT_CL_DLL_DECL

    68310

    C++屏幕截图 图片转JPEG

    项目下创建modules文件夹,把之前的libjpeg文件夹放进来 项目右键属性 在C/C++下常规中的附加包含目录中添加modules\libjpeg\include ?...生成DLL一定要用Release环境!!! 生成DLL一定要用Release环境!!! 否则会依赖的DLL也会用Debug的DLL,在普通用户的环境中是没有这些DLL的。...@1, MyBmp2Jpeg @2, 注意 文件名和LIBRARY screenshot都要和项目名保持一致 导出都要导出方法,不要导出类,导出类其他语言不支持,所以我们添加一个导出方法MyBmp2Jpeg...文件; } return 0; } 在VS目录中搜索dumpbin.exe,添加到环境变量中 dumpbin /exports screenshot.dll DLL导出类: 优点:导出的类可以被继承...,调用层次也清晰,可以保留类的完整特性; 缺点:不能被其它语言调用(包括C语言),封装性并不是太好。

    2.3K10

    Thrift之代码生成器Compiler原理及源码详细解析2

    std::mapstd::string, t_generator_factory*> gen_map_t; get_generator_map函数只有两句代码,一个是定义一个静态局部变量并初始化...第二个问题分析和解决思路如下: 我们通常认为main函数是程序的入口函数,那么所以程序的执行都是从main函数开始的,所以我也选择从main函数开始分析这部分的代码,根据程序的执行流程阅读和分析代码是我一贯的思路...由于我反复从main开始一直详细的阅读每一行代码,所以可以确定确实没有在执行的过程中初始化the_map静态局部变量,所以唯一的可能就是在main函数开始之前已经初始化好了。..._->get_consts();   generate_consts(consts);   vector objects = program_->get_objects()...;   vector::iterator o_iter;   for (o_iter = objects.begin(); o_iter !

    98550

    java表格识别PaddleOcr总结

    opencv的win环境是官网下包就可以了,也可以自己编译。paddleocr的dll、so环境搭建文章前面也写了点(只不过win和linux都需要自己编译)。...生成dll还是其他一些操作可以借助AI给点实例参考。cmake遇到得问题cmake我也不太熟悉但是好多需要编译的都需要用这个处理。...std::vectorstd::vector> ocr_results = ocr.ocr(img_list, FLAGS_det, FLAGS_rec, FLAGS_cls...对象反序列化read/useMemory基类是protect类型的需要覆盖下,AI给的是直接调用方法的。...网上应该是作者出了个onnx的版本,这个导出的模型没有默认长和宽这个需要注意下,另外模型转onnx后运算处理逻辑还是太复杂了(主要一些数学函数处理)java没有这方面的类库不好处理也试着用AI翻译下但还是放弃了

    15010

    【C++】基础:STL标准库常用模块使用

    STL的设计目标是提供高效、可靠、易于使用的工具,以提高开发效率和代码可维护性。 STL主要包含以下三个组件: 容器(Containers): 容器是STL中用于存储和管理数据的类模板。...STL提供了各种不同类型的容器,包括动态数组(vector)、双向链表(list)、队列(queue)、栈(stack)、集合(set)、映射(map)等。...,int> phone_book; // 创建一个map类容器,用于存储电话号码簿 // 创建电话簿 phone_book["zhangsan"] = 12345678; //...其他模块 函数对象(Function Objects) STL提供了函数对象类模板,允许用户自定义函数对象(也称为仿函数),以便在算法中使用。...用户可以通过实现自己的分配器类来满足特定的内存管理需求,例如内存池、定制的内存分配策略等。

    14010

    CC++ 技术面试基础知识总结

    DLL 可以导出函数、变量(避免导出)、C++ 类(导出导入需要同编译器,否则避免导出) DLL 模块:cpp 文件中的 __declspec(dllexport) 写在 include 头文件之前...信息 在 VS 的开发人员命令提示符 使用 DumpBin.exe 可查看 DLL 库的导出段(导出的变量、函数、类名的符号)、相对虚拟地址(RVA,relative virtual address)...FreeLibrary DLL 库的编写(导出一个 DLL 模块) DLL 库的编写(导出一个 DLL 模块) DLL 头文件 // MyLib.h #ifdef MYLIBAPI // MYLIBAPI...应该在全部 DLL 源文件的 include "Mylib.h" 之前被定义 // 全部函数/变量正在被导出 #else // 这个头文件被一个exe源代码模块包含,意味着全部函数/变量被导入 #...) // 包含导出的数据结构、符号、函数、变量 #include "MyLib.h" // 将此DLL源代码文件的代码放在此处 int g_nResult; int Add(int nLeft,

    1.8K20

    STL小结

    这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list, vector,set,map等,STL也是算法和其它一些组件的集合。...比如set、map、multiset、multimap、priority_queue等容器类要求重载operator的相同数值的元素只能出现一次,Multisets内可包含多个数值相同的元素。 Map内的相同数值的元素只能出现一次,Multimap内可包含多个数值相同的元素。内部由二叉树实现,便于查找。...size_t n = (std::min)(count_, num_elements); 23、STL不一定不能在DLL间传递,不能将STL变量作为DLL接口中参数进行数据传递。...由于这些类是通过模板扩展而来的,因此每个可执行映像(通常是.dll或.exe文件)就会存在 一份只属于自己的、给定类的静态数据成员。

    85110

    利用白加黑静态逃逸杀软

    杀毒软件厂商通过算法如MD5等获取样本的唯一值来构建云端特征库,另一方面很多合法的软件也需要要用到一些敏感的系统动作,于是就出现了软件签名技术。..."), MB_OK); } 当dll被加载的时候就会进入DLL_PROCESS_ATTACHED中执行其中HelloWorld()函数,一般开发者会导出自己写的函数给主程序使用: extern __declspec...dll了,不过如果dll导出函数太多的话,一个个去复制粘贴太累了,不现实,这里我们要使用工具 AheadLibEx.exe,这将帮助我们轻松生成一个VS project: 打开生成的VS project...XorByInputKey(std::vector& shellcode, const std::string& key) { size_t shellcodeSize...game.ini中读取加密的shellcode std::ifstream file("game.ini", std::ios::binary); std::vector

    49810
    领券