我是新来的......我的申请表有问题。 我写了一个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;
};
有人知道,为什么它不起作用并给我一个解决方案?
谢谢:)
答案 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();
}