在我的应用程序中无法使用的DLL中的vector.h

时间:2017-04-29 08:10:56

标签: c++ vector dll

我是新来的......我的申请表有问题。 我写了一个dll,其中我使用了struct和vector。在矢量中我想要我的结构实例。到目前为止,一切都很好。

我的应用程序中导入了dll。现在我想在应用程序中使用我的dll矢量,但这不起作用。

我没有得到任何错误,我想做的是在我的main() - 应用程序中获取信息,例如:

#include "lib.h"
#include <iostream>

    int main()
    {
        char setData[4];
        setData[0] = 0xBE;
        setData[1] = 0x3E;
        setData[2] = 0xB8;
        setData[3] = 0x13;

        getuseablePID(setData);     //this function is in my dll and copies the information of my csv-Data to my vector

        //here i want to know the size of my vector an want to print one element but this doesn't work 
        int a = globals::getInstance()._csvContent.size();
        cout << globals::getInstance()._csvContent.PID;

        return 0;
    }

这是我的dll-Code

#include <fstream>
#include <string>
#include <vector>


using namespace std;

#define EXPORT extern "C" __declspec(dllexport)



struct csvDatei_Para {
    string PID;
    string Beschreibung;
    string Byteanzahl;
    string Min;
    string Max;
    string Einheit;
    string Wertetab;
};

struct globals {
    static globals& getInstance()
    {
        static globals instance;
        return instance;
    }
    std::vector<csvDatei_Para> _csvContent;
};

我也尝试过这种方式:

EXPORT struct globals {
    static globals& getInstance()
    {
        static globals instance;
        return instance;
    }
    std::vector<csvDatei_Para> _csvContent;
};

有人知道,为什么它不起作用并给我一个解决方案?

谢谢:)

2 个答案:

答案 0 :(得分:0)

请测试此代码:

#include <fstream>
#include <string>
#include <vector>
using namespace std;
#ifndef GUARD_DLLHDR_H
#define GUARD_DLLHDR_H

#if defined(BUILD_MY_DLL)
#define DLLSYM __declspec(dllexport)
#else
#define DLLSYM __declspec(dllimport)
#endif

#if defined(__cplusplus)
extern "C" {
#endif

    struct csvDatei_Para
    {
        string PID;
        string Beschreibung;
        string Byteanzahl;
        string Min;
        string Max;
        string Einheit;
        string Wertetab;
    };


    struct globals {
        static globals& getInstance()
        {
            static globals instance;
            return instance;
        }
        std::vector<csvDatei_Para> _csvContent;
    };
    DLLSYM extern globals myGlobals;

#if defined(__cplusplus)
}
#endif

#endif

答案 1 :(得分:-2)

现在我找到了解决方案。

我编写了一个函数,它返回一个globals实例。 这个实例我可以用来获取我的struct的变量。

在我的.h:

def updatetimings():
    ask = messagebox.askquestion('Validation','Are you sure you want to update timings?')
    if ask =='yes':
        try:
            a = newv5c.get()    

            if a == "":
                e1 = v5c_timing
            elif type(a) != float :
                messagebox.showinfo('Error','Please enter decimal numbers only')
            else:
                e1 = a
        except ValueError:
            messagebox.showinfo('Error','Please enter decimal numbers only')
            pass

在我的.cpp中:

EXPORT struct globals getValues();

在我的申请中:

struct globals getValues(){
return globals::getInstance();
}