我们使用Below代码在LPT1端口中打印票证数据.这些代码在Win-7 Delphi-7 Exe中运行良好,但相同的代码不适用于Win-7 Delphi XE.我试过net中提供的解决方案.但它并没有帮助我解决问题.请你能为此提出任何解决方案.
function TdmDisneyCastTrac.SendToParallelPort(pContent : TStringList): boolean;
var
slPrintLines : TStringList;
hFile : THandle;
Overlapped : TOverlapped;
I : integer;
bContentPrinted : boolean;
dw : DWORD;
begin
slPrintLines := TStringList.Create;
result := True;
try
slPrintLines.AddStrings(pContent);
FillChar(Overlapped, SizeOf(Overlapped),0);
I := 0;
repeat
hFile := INVALID_HANDLE_VALUE;
bContentPrinted := True;
hFile := CreateFile(PChar('LPT1:'), GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if hFile = INVALID_HANDLE_VALUE then
bContentPrinted := False
else
begin
Overlapped.hEvent := CreateEvent(nil, False, False, nil);
if Overlapped.hEvent = 0 then …Run Code Online (Sandbox Code Playgroud) 通过打开NTFS文件数据流时,是否可以在路径名中指定流偏移量CreateFile?
如果pathname以\\?\?开头怎么办?
例如,abcd.txt::$DATA指定未命名流*的偏移量0; 是否可以在路径名**中指定不同的偏移量?
*从技术上讲,这也意味着偏移量等于流长度,以防WriteFile附加**而不使用SetFilePointer
好的,我的程序有问题.我之前提出过一个问题,但没有人真正理解我的问题,所以我这次尝试一种新方法.
如果你很好奇,这是我的问题:
我的程序以形式接受参数
char* argv[],并且我无法指向正在argv[1]使用的任何东西LPWSTR,因为它只指向const wchar_t*对象.
这是一个新的事情,我试图解决我的问题(我已经尝试了多种东西,但我需要知道如何做我想的,或者如果可能的话)
基本上,我的想法是#define某种功能,它可以接受任何内容,argv[1]并const wchar_t*使用该值定义a .
像这样的东西:
#define path ((const wchar_t*)argv[1])
Run Code Online (Sandbox Code Playgroud)
我不确定这是正确的方式(或者即使这是可能的)做我想做的事......
如果你有一个更好的方法来解决我的问题,请(请)告诉我如何帮助我,我一直在考虑这个很长的时间!
我的计划说明:
我正在制作一个接受争论的程序.参数是驱动器的名称,例如"F:".然后它使用
CreateFile带驱动器号的函数.如果你去这里,看看函数的第一个参数,我想你会看到我的意思....问题是,对于我来说,制作一个LPWSTR,我需要一个const wchat_t*对象....我希望这一次我的问题很清楚,上次人们真的不明白我想要做什么.
无论如何,谢谢!编辑1:这里是解决我的程序的行(这是我必须做的工作,没有参数)(我在这里使用固定值)
int main()
{
HANDLE device;
device = CreateFile(L"\\\\.\\F:", // Drive to open
GENERIC_READ | GENERIC_WRITE, // Access mode
FILE_SHARE_READ | FILE_SHARE_WRITE, // Share Mode
NULL, // Security Descriptor
OPEN_EXISTING, // How to create
0, // File attributes
NULL);
}
Run Code Online (Sandbox Code Playgroud)
这是有参数(不起作用)
int main(int …Run Code Online (Sandbox Code Playgroud) 我正在Visual C ++项目中编写一个函数,该函数以2000字节为增量通过WinAPI读取文件的内容,并将其作为std :: string返回。
当文件远大于缓冲区(例如100 KB)时,会出现问题,在有效数据中间,我在文件中的多个位置添加了垃圾。这是一个长0xcccccccc...序列,由3-4个其他字节终止,通常出现在一个单词的中间。否则,该功能不会失败,并且不会丢失任何有效数据。
我没有检查确切的位置,但似乎这发生在缓冲区大小增加(或缓冲区大小增加的乘数)上。如果我将缓冲区的大小增加到大于测试文件的大小,那么问题就消失了。是什么原因导致这种情况发生?我究竟做错了什么?
std::string read_file(std::string filename) {
HANDLE hFile = CreateFile(filename.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
std::string errortext("Error opening " + filename + ", bad handle value: " + to_string((int)hFile));
MessageBox(hwnd, errortext.c_str(), "Error", 0);
return "";
}
char buffer[2000] = "";
std::string entire_file = "";
DWORD dwBytesRead = 0;
while (ReadFile(hFile, buffer, sizeof(buffer), &dwBytesRead, NULL))
{
if (!dwBytesRead)
break;
entire_file += buffer;
}
CloseHandle(hFile);
return entire_file;
}
Run Code Online (Sandbox Code Playgroud)