我有一个C++中的dll,用于智能卡的行为。我写了一个JSON文件,用于接收数据和响应所需的响应。它看起来像这样:
{
"00xxxxxx" : ["aaaaaaaaaaaaaaaaa", {
"00yyyyyyyyyy" : ["bbbbbbbbbbbbbbbb", {
"00zzzzzzzzz" : ["9000", {}]
}]
}]
}
我的CommandHandler.cpp文件接收来自另一个应用程序的命令。它看起来如下:
string CommandHandler::sendCommand(string command)
{
data = data[command];
string response;
if(data == nullptr){
response = "6700";
return response;
}
response = data[0];
data = data[1];
return response;
}
CommandHandler::CommandHandler(){} //Empty constructor
CommandHandler::CommandHandler(string jsonCommandsPath)
{
std::ifstream f(jsonCommandsPath);
data = json::parse(f);
}
string CommandHandler::getJsonFile(){
jsonCommandsPath = "MyPath";
return jsonCommandsPath;
}
最后,我调用另一个名为FakeTransmitter.cpp的类中的CommandHandler构造函数:
CommandHandler command;
NOT_EXPORTED CommandHandler commandHandler(command.getJsonFile());
EXPORTED LONG CardTransmit(CARDHANDLE hCard,
LPCBYTE pbSendBuffer, DWORD cbSendLength,
/*@out@*/ LPBYTE pbRecvBuffer, PDWORD pcbRecvLength) {
string command = Conversion::ByteArrayToHexStr(pbSendBuffer, cbSendLength);
string response = commandHandler.sendCommand(command);
//here I wrote response code, it works correctly.
return 5;
}
我用CMake构建了这个项目,并在另一个项目中使用dll进行假响应。然而,在第一次调用它工作的命令时,在我调用相同的命令后,它返回“6700”,这意味着它返回nullptr。
第二个项目的输出如下所示:
Command: 00xxxxxx
Response: aaaaaaaaaaaaaaaaa
Command: 00yyyyyyyyyy
Response: bbbbbbbbbbbbbbbb
Command: 00zzzzzzzzz
Response: 9000
Command: 00xxxxxx -------> Here I call first command again in the same runtime
Response: 6700
我想,我不能再读那个JSON文件了。当我从第二个项目调用的时候,我怎么能达到同样的命令呢?
我只希望在再次调用相同的命令时显示响应。我期望的输出应该如下所示:
Command: 00xxxxxx
Response: aaaaaaaaaaaaaaaaa
Command: 00yyyyyyyyyy
Response: bbbbbbbbbbbbbbbb
Command: 00zzzzzzzzz
Response: 9000
Command: 00xxxxxx
Response: aaaaaaaaaaaaaaaaa
Command: 00yyyyyyyyyy
Response: bbbbbbbbbbbbbbbb
Command: 00zzzzzzzzz
Response: 9000
我已经在项目中尝试了f.close()和f.open()。也许我用错了它们,但是当我使用它们时,它返回我“无效的内存访问”。有解决这个问题的方法吗?
1条答案
按热度按时间2uluyalo1#
因此,在我看来,当您接收到当前JSON结构无法理解的命令时,您似乎希望重用原始JSON结构,因此要做到这一点,您需要首先将原始JSON结构保存在类中
你需要把
originalData
添加到你的类中,因为你没有展示那个类,所以我不能告诉你怎么做,但是希望它足够清楚。然后,当您发现无法理解的命令时,您需要重用原始数据。
我有点猜测,因为你的要求不完全清楚。