Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT,c++;DLL和对象_C++_Qt_Object_Vector_Dll - Fatal编程技术网

C++ QT,c++;DLL和对象

C++ QT,c++;DLL和对象,c++,qt,object,vector,dll,C++,Qt,Object,Vector,Dll,我对DLL相当陌生,对QT也完全陌生。我已经玩了几天了,正在尝试创建一个项目,在这个项目中,我读取一个文件的内容,并整齐地显示解析的结果。我已经编写了一个dll来解析文件格式,并希望在我的QT GUI中使用该dll 我的dll包含4个文件,SignalParse.h/cpp和Signal.h/cpp SignalParse是dll的核心,包含功能,Signal是用于存储数据的对象 我的目标是让我的QT程序在SignalParse中使用此函数: __declspec(dllexport) vect

我对DLL相当陌生,对QT也完全陌生。我已经玩了几天了,正在尝试创建一个项目,在这个项目中,我读取一个文件的内容,并整齐地显示解析的结果。我已经编写了一个dll来解析文件格式,并希望在我的QT GUI中使用该dll

我的dll包含4个文件,SignalParse.h/cpp和Signal.h/cpp

SignalParse是dll的核心,包含功能,Signal是用于存储数据的对象

我的目标是让我的QT程序在SignalParse中使用此函数:

__declspec(dllexport) vector<Signal> ReturnSignal()
{
    return sigList;
}
这背后的目的是让GUI能够访问dll并使用它解析文件,然后读取解析的数据

然而,由于我返回了一个信号向量,我(认为我)需要在我的QT项目中包含信号。这是正常的做法吗?或者我应该尝试以另一种方式存储数据

作为一个新手,我不知道如何处理这种情况。将我的信号数据存储在一个对象中的想法似乎是最简洁的,但是在每个使用dll的程序中都必须包含该对象似乎不那么简洁

也许有更好的方法?我非常想知道我的方法是否合理,或者是否有另一种明显的方法来处理我所忽视的这类事情


谢谢

是,包括
信号将是必要的(这不是问题)。为什么要创建DLL而不是静态库?静态库(通常)更易于管理。主要是作为一种学习体验!:)我需要同时包含.h和.cpp还是只包含.h?通常,动态加载dll时,程序中不需要任何.h或.cpp。您可以在运行时动态加载dll,并在代码中匹配dllexport函数。这是一种在运行时“选择”功能的好方法,因为dll(插件)将被写入一些基本接口,您可以根据加载的dll更改运行时行为。如果您试图动态链接到该类,则在编译过程中需要.h和库(dll)进行链接。您还需要为客户端(可能)调用的所有函数定义。这不仅意味着命名函数,还包括析构函数、复制/移动构造函数等。也许还可以复制/移动作业。如果这些函数是内联的,那么很好,如果不是,您将需要CPP文件。别忘了,您还需要对您调用的任何成员类型的任何成员函数进行定义。@g19fanatic:如果您正在动态加载DLL,这是正确的,但是如果您正在链接DLL(例如运行时库),则这不是正确的。是的,包括
信号
是必要的(这不是问题)。为什么要创建DLL而不是静态库?静态库(通常)更易于管理。主要是作为一种学习体验!:)我需要同时包含.h和.cpp还是只包含.h?通常,动态加载dll时,程序中不需要任何.h或.cpp。您可以在运行时动态加载dll,并在代码中匹配dllexport函数。这是一种在运行时“选择”功能的好方法,因为dll(插件)将被写入一些基本接口,您可以根据加载的dll更改运行时行为。如果您试图动态链接到该类,则在编译过程中需要.h和库(dll)进行链接。您还需要为客户端(可能)调用的所有函数定义。这不仅意味着命名函数,还包括析构函数、复制/移动构造函数等。也许还可以复制/移动作业。如果这些函数是内联的,那么很好,如果不是,您将需要CPP文件。不要忘记,您还需要定义您调用的任何成员类型的任何成员函数。@g19fanatic:如果您动态加载DLL,则这是正确的;如果您链接到DLL,则这不是正确的(例如,运行时库)。
[SignalOne]
bytes: 2
format: int
offset: 0