Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 如何将长整型转换为字符 #包括 #包括 #包括 使用名称空间std; HANDLE hPort=CreateFile(“COM2”, GENERIC_WRITE | GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); DCB-DCB; 布尔写字节(字符*数据) { 德沃德·拜特斯莱特; 如果(!GetCommState(hPort和dcb)) { printf(“\n串行端口无法打开\n”); 返回false; } dcb.BaudRate=CBR_9600; dcb.ByteSize=8; dcb.奇偶性=无奇偶性; dcb.StopBits=一个StopBits; 如果(!SetCommState(hPort和dcb)) 返回false; bool retVal=WriteFile(hPort,data,1,&byteswrited,NULL); 返回返回; } int ReadByte() { int-Val; 字节; DWORD DWBYTEST转让; 德沃德·德沃德·德克莫德姆斯塔特斯; 如果(!GetCommState(hPort和dcb)) 返回0; 设置通信掩码(hPort,EV|RXCHAR | EV|ERR); WaitCommEvent(hPort和dwCommModemStatus,0); if(dwCommModemStatus和EV_RXCHAR) ReadFile(hPort,&Byte,1,&dwbytesttransfered,0); Val=字节; 返回Val; } int main(){ p点; int x; int-y; intz; 而(0==0){ GetCursorPos&p; x=p.x; y=p.y; HDC-HDC; hDC=GetDC(空); cin>>z; 您为什么在发布hDC后使用它 #include <iostream> #include <Windows.h> #include <string> using namespace std; HANDLE hPort = CreateFile("COM2", GENERIC_WRITE|GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); DCB dcb; bool writebyte(char*data) { DWORD byteswritten; if (!GetCommState(hPort,&dcb)) { printf("\nSerial port can't be open\n"); return false; } dcb.BaudRate = CBR_9600; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; if (!SetCommState(hPort,&dcb)) return false; bool retVal = WriteFile(hPort,data,1,&byteswritten,NULL); return retVal; } int ReadByte() { int Val; BYTE Byte; DWORD dwBytesTransferred; DWORD dwCommModemStatus; if (!GetCommState(hPort,&dcb)) return 0; SetCommMask(hPort,EV_RXCHAR | EV_ERR); WaitCommEvent (hPort,&dwCommModemStatus,0); if (dwCommModemStatus & EV_RXCHAR) ReadFile (hPort,&Byte,1,&dwBytesTransferred,0); Val = Byte; return Val; } int main() { POINT p; int x; int y; int z; while(0==0){ GetCursorPos(&p); x = p.x; y = p.y; HDC hDC; hDC = GetDC(NULL); cin >> z; cout << GetPixel(hDC, x, y) << endl; Sleep(z); ReleaseDC(NULL, hDC); char data = GetPixel(hDC, x, y); if (writebyte(&data)) cout <<" DATA SENT.. " << (int)data<< "\n"; } }_Winapi - Fatal编程技术网

Winapi 如何将长整型转换为字符 #包括 #包括 #包括 使用名称空间std; HANDLE hPort=CreateFile(“COM2”, GENERIC_WRITE | GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); DCB-DCB; 布尔写字节(字符*数据) { 德沃德·拜特斯莱特; 如果(!GetCommState(hPort和dcb)) { printf(“\n串行端口无法打开\n”); 返回false; } dcb.BaudRate=CBR_9600; dcb.ByteSize=8; dcb.奇偶性=无奇偶性; dcb.StopBits=一个StopBits; 如果(!SetCommState(hPort和dcb)) 返回false; bool retVal=WriteFile(hPort,data,1,&byteswrited,NULL); 返回返回; } int ReadByte() { int-Val; 字节; DWORD DWBYTEST转让; 德沃德·德沃德·德克莫德姆斯塔特斯; 如果(!GetCommState(hPort和dcb)) 返回0; 设置通信掩码(hPort,EV|RXCHAR | EV|ERR); WaitCommEvent(hPort和dwCommModemStatus,0); if(dwCommModemStatus和EV_RXCHAR) ReadFile(hPort,&Byte,1,&dwbytesttransfered,0); Val=字节; 返回Val; } int main(){ p点; int x; int-y; intz; 而(0==0){ GetCursorPos&p; x=p.x; y=p.y; HDC-HDC; hDC=GetDC(空); cin>>z; 您为什么在发布hDC后使用它 #include <iostream> #include <Windows.h> #include <string> using namespace std; HANDLE hPort = CreateFile("COM2", GENERIC_WRITE|GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); DCB dcb; bool writebyte(char*data) { DWORD byteswritten; if (!GetCommState(hPort,&dcb)) { printf("\nSerial port can't be open\n"); return false; } dcb.BaudRate = CBR_9600; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; if (!SetCommState(hPort,&dcb)) return false; bool retVal = WriteFile(hPort,data,1,&byteswritten,NULL); return retVal; } int ReadByte() { int Val; BYTE Byte; DWORD dwBytesTransferred; DWORD dwCommModemStatus; if (!GetCommState(hPort,&dcb)) return 0; SetCommMask(hPort,EV_RXCHAR | EV_ERR); WaitCommEvent (hPort,&dwCommModemStatus,0); if (dwCommModemStatus & EV_RXCHAR) ReadFile (hPort,&Byte,1,&dwBytesTransferred,0); Val = Byte; return Val; } int main() { POINT p; int x; int y; int z; while(0==0){ GetCursorPos(&p); x = p.x; y = p.y; HDC hDC; hDC = GetDC(NULL); cin >> z; cout << GetPixel(hDC, x, y) << endl; Sleep(z); ReleaseDC(NULL, hDC); char data = GetPixel(hDC, x, y); if (writebyte(&data)) cout <<" DATA SENT.. " << (int)data<< "\n"; } }

Winapi 如何将长整型转换为字符 #包括 #包括 #包括 使用名称空间std; HANDLE hPort=CreateFile(“COM2”, GENERIC_WRITE | GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); DCB-DCB; 布尔写字节(字符*数据) { 德沃德·拜特斯莱特; 如果(!GetCommState(hPort和dcb)) { printf(“\n串行端口无法打开\n”); 返回false; } dcb.BaudRate=CBR_9600; dcb.ByteSize=8; dcb.奇偶性=无奇偶性; dcb.StopBits=一个StopBits; 如果(!SetCommState(hPort和dcb)) 返回false; bool retVal=WriteFile(hPort,data,1,&byteswrited,NULL); 返回返回; } int ReadByte() { int-Val; 字节; DWORD DWBYTEST转让; 德沃德·德沃德·德克莫德姆斯塔特斯; 如果(!GetCommState(hPort和dcb)) 返回0; 设置通信掩码(hPort,EV|RXCHAR | EV|ERR); WaitCommEvent(hPort和dwCommModemStatus,0); if(dwCommModemStatus和EV_RXCHAR) ReadFile(hPort,&Byte,1,&dwbytesttransfered,0); Val=字节; 返回Val; } int main(){ p点; int x; int-y; intz; 而(0==0){ GetCursorPos&p; x=p.x; y=p.y; HDC-HDC; hDC=GetDC(空); cin>>z; 您为什么在发布hDC后使用它 #include <iostream> #include <Windows.h> #include <string> using namespace std; HANDLE hPort = CreateFile("COM2", GENERIC_WRITE|GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); DCB dcb; bool writebyte(char*data) { DWORD byteswritten; if (!GetCommState(hPort,&dcb)) { printf("\nSerial port can't be open\n"); return false; } dcb.BaudRate = CBR_9600; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; if (!SetCommState(hPort,&dcb)) return false; bool retVal = WriteFile(hPort,data,1,&byteswritten,NULL); return retVal; } int ReadByte() { int Val; BYTE Byte; DWORD dwBytesTransferred; DWORD dwCommModemStatus; if (!GetCommState(hPort,&dcb)) return 0; SetCommMask(hPort,EV_RXCHAR | EV_ERR); WaitCommEvent (hPort,&dwCommModemStatus,0); if (dwCommModemStatus & EV_RXCHAR) ReadFile (hPort,&Byte,1,&dwBytesTransferred,0); Val = Byte; return Val; } int main() { POINT p; int x; int y; int z; while(0==0){ GetCursorPos(&p); x = p.x; y = p.y; HDC hDC; hDC = GetDC(NULL); cin >> z; cout << GetPixel(hDC, x, y) << endl; Sleep(z); ReleaseDC(NULL, hDC); char data = GetPixel(hDC, x, y); if (writebyte(&data)) cout <<" DATA SENT.. " << (int)data<< "\n"; } },winapi,Winapi,出现错误时,GetPixel将返回-1(CLR\u INVALID) 顺便说一下,COLORREF不是char,因此在char data中存储GetPixel的返回值时会丢失信息。您应该存储完整的COLORREF并发送/接收其所有字节(因此发送/接收sizeof(COLORREF)字节) 还要注意字节顺序。如果要在两台机器之间传输多字节数据,则必须确保两台机器在字节顺序上一致。例如,如果一台机器是小端字节,另一台是大端字节,则它们在内存中以不同的字节顺序存储COLORREF。一台是在内存中存储C

出现错误时,
GetPixel
将返回-1(
CLR\u INVALID

顺便说一下,
COLORREF
不是
char
,因此在
char data
中存储
GetPixel
的返回值时会丢失信息。您应该存储完整的
COLORREF
并发送/接收其所有字节(因此发送/接收
sizeof(COLORREF)
字节)


还要注意字节顺序。如果要在两台机器之间传输多字节数据,则必须确保两台机器在字节顺序上一致。例如,如果一台机器是小端字节,另一台是大端字节,则它们在内存中以不同的字节顺序存储
COLORREF
。一台是在内存中存储COLORREF 0x00BBGGRRy作为
{0,0xbb,0xgg,0xrr}
而另一个存储它作为
{0xrr,0xgg,0xbb,0}
。因此,您需要定义传输字节顺序,双方独立于主机字节顺序使用。如果您不想发明新的轮子,可以查看网络字节顺序并重新使用。Socket API为您提供了一些函数,如
ntohl
htonl
,帮助您将主机字节顺序转换为网络字节顺序,反之亦然。

为什么在释放hDC后要使用它

#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;


HANDLE hPort = CreateFile("COM2",
GENERIC_WRITE|GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
DCB dcb;

bool writebyte(char*data)
{
    DWORD byteswritten;
    if (!GetCommState(hPort,&dcb))
    {
        printf("\nSerial port can't be open\n");
        return false;
    }

    dcb.BaudRate = CBR_9600;
    dcb.ByteSize = 8;
    dcb.Parity = NOPARITY;
    dcb.StopBits = ONESTOPBIT;

    if (!SetCommState(hPort,&dcb))
        return false;

    bool retVal = WriteFile(hPort,data,1,&byteswritten,NULL);

    return retVal;
}

int ReadByte()
{

    int Val;
    BYTE Byte;
    DWORD dwBytesTransferred;
    DWORD dwCommModemStatus;
    if (!GetCommState(hPort,&dcb))
    return 0;

    SetCommMask(hPort,EV_RXCHAR | EV_ERR);
    WaitCommEvent (hPort,&dwCommModemStatus,0);
    if (dwCommModemStatus & EV_RXCHAR)
    ReadFile (hPort,&Byte,1,&dwBytesTransferred,0);
    Val = Byte;
    return Val;
}

int main() {

    POINT p;
    int x;
    int y;
    int z;


    while(0==0){
    GetCursorPos(&p);
    x = p.x;
    y = p.y;
    HDC hDC;

    hDC = GetDC(NULL);

    cin >> z;
    cout << GetPixel(hDC, x, y) << endl;
    Sleep(z);
    ReleaseDC(NULL, hDC);

    char data = GetPixel(hDC, x, y);
        if (writebyte(&data))
        cout <<" DATA SENT.. " << (int)data<< "\n";

    }
}
出现错误时,
GetPixel
将返回-1(
CLR\u INVALID

顺便说一下,
COLORREF
不是
char
,因此在
char data
中存储
GetPixel
的返回值时会丢失信息。您应该存储完整的
COLORREF
并发送/接收其所有字节(因此发送/接收
sizeof(COLORREF)
字节)


还要注意字节顺序。如果要在两台机器之间传输多字节数据,则必须确保两台机器在字节顺序上一致。例如,如果一台机器是小端字节,另一台是大端字节,则它们在内存中以不同的字节顺序存储
COLORREF
。一台是在内存中存储COLORREF 0x00BBGGRRy作为
{0,0xbb,0xgg,0xrr}
而另一个存储它作为
{0xrr,0xgg,0xbb,0}
。因此,您需要定义传输字节顺序,双方独立于主机字节顺序使用。如果您不想发明新的轮子,可以查看网络字节顺序并重新使用。Socket API为您提供了一些函数,如
ntohl
htonl
,帮助您将主机字节顺序转换为网络字节顺序,反之亦然。

GetPixel返回一个COLORREF,不要假装它是一个char。当您尝试将一个大整数作为一个字节发送时,您期望发生什么?由于COLORREF是4个字节,您需要调用writebyte 4次才能发送它。@wipw可能更愿意重写writebyte,以便它可以发送多个byteGetPixel返回一个COLORREF,不要假装它是一个字符。当你试图将一个大整数作为一个字节发送时,你期望发生什么?因为COLORREF是4个字节,你需要调用writebyte 4次才能发送它。@wipw可能更愿意重写writebyte,这样它就可以发送多个字节,我已经看过代码了,我在想我真的很蠢,竟然问这个问题..哈哈..无论如何,谢谢大家..@user2201682当你看不到明显的(错误)时,我们不是都知道这些情况吗?:-)如果你测试了我的建议我想我的帖子是在回答你的问题,那么请接受。现在我已经阅读了代码,我想我问这个问题真的很愚蠢……哈哈……无论如何,谢谢大家。@user2201682当你看不到明显的(bug)时,我们不都知道这些情况吗?:-)如果你测试了我的建议如果你认为我的帖子回答了你的问题,那么请接受它。