我制作了这个dll文件,试图检查文件是否存在。但即使我手动创建文件,我的dll仍然无法找到它。
我的dll检索正在运行的程序的进程ID,并查找以pid命名的文件。
任何人都可以告诉我我缺少的东西:(
代码:
#include <Windows.h>
#include <winbase.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
using namespace std;
int clientpid = GetCurrentProcessId();
ifstream clientfile;
string clientpids, clientfilepath;
VOID LoadDLL() {
AllocConsole();
freopen("CONOUT$", "w", stdout);
std::cout << "Debug Start" << std::endl;
std::ostringstream ostr;
ostr << clientpid;
clientpids = ostr.str();
ostr.str("");
TCHAR tempcvar[MAX_PATH];
GetSystemDirectory(tempcvar, MAX_PATH);
ostr << tempcvar << "\\" << clientpids << ".nfo" << std::endl;
clientfilepath = ostr.str();
//clientfile.c_str()
ostr.str("");
std::cout << "Start search for: " << clientfilepath << std::endl;
FOREVER {
clientfile.open(clientfilepath,ios::in);
if(clientfile.good()) {
std::cout << "Exists!" << std::endl;
}
Sleep(10);
};
}
答案 0 :(得分:0)
假设您正在使用UNICODE
我认为问题在于以下几点:
ostr << tempcvar << "\\" << clientpids << ".nfo" << std::endl;
tempcvar是一个tchar,也许你正在使用unicode,所以它意味着tempcvar是一个宽的数字。
您在tempcvar
中插入ostr
的结果并不是您所期望的(您正在将多字节与widechar混合)。此问题的解决方案是将tempcvar
转换为多字节字符串(const char*
或char*
...)
根据您的代码查看此示例(查看tchar到multibyte char之间的转换)
VOID LoadDLL() {
AllocConsole();
freopen("CONOUT$", "w", stdout);
std::cout << "Debug Start" << std::endl;
std::ostringstream ostr;
ostr << clientpid;
clientpids = ostr.str();
ostr.str("");
TCHAR tempcvar[MAX_PATH];
GetSystemDirectory(tempcvar, MAX_PATH);
// Convertion between tchar in unicode (wide char) and multibyte
wchar_t * tempcvar_widechar = (wchar_t*)tempcvar;
char* to_convert;
int bytes_to_store = WideCharToMultiByte(CP_ACP,
0,
tempcvar_widechar,
-1,NULL,0,NULL,NULL);
to_convert = new char[bytes_to_store];
WideCharToMultiByte(CP_ACP,
0,
tempcvar_widechar,
-1,to_convert,bytes_to_store,NULL,NULL);
// Using char* to_convert that is the tempcvar converted to multibyte
ostr << to_convert << "\\" << clientpids << ".nfo" << std::endl;
clientfilepath = ostr.str();
//clientfile.c_str()
ostr.str("");
std::cout << "Start search for: " << clientfilepath << std::endl;
FOREVER {
clientfile.open(clientfilepath,ios::in);
if(clientfile.good()) {
std::cout << "Exists!" << std::endl;
}
Sleep(10);
};
}
如果此示例对您不起作用,您可以搜索有关宽字符串到多字节字符串转换的更多信息
检查您是否使用Unicode,如果您使用,可能这是您的问题。
如果您不使用unicode,代码中的问题可能是打开文件
希望它有所帮助!