- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试通过 wifi 连接将数据发送到接收器以进行实验。我设法使用适用于 wifi 的 Windows API Native 将卡连接到接收器。
我将卡的 GUID 存储在 pIfInfo 指针 (PWLAN_INTERFACE_INFO) 中并提取它以创建允许我在连接上写入的句柄 (WifiAcess)。
然后,如果我运行它,我会在 WriteFile 函数上收到错误 ERROR_INVALID_PARAMETER,无论是否在 envois 之前进行 (void*) 转换。
嗯,我的问题是,我不知道哪个参数无效
DWORD bytesSend;
char *buffer ;
unsigned int nbChar ;
要发送的数据
int headerData[4] = {85,0,11,0};
int ServosData[6] = {100,100,0,100,0,0};
BYTE * envois = new BYTE[11];
envois[0] = headerData[0] ;
envois[1] = headerData[1] ;
envois[2] = headerData[2] ;
envois[3] = headerData[3] ;
envois[4] = ServosData[0] ;
envois[5] = ServosData[1] ;
envois[6] = ServosData[2] ;
envois[7] = ServosData[3] ;
envois[8] = ServosData[4] ;
envois[9] = ServosData[5] ;
校验和
for(int i = 0 ; i<10;i++)
{
envois[10] = envois[10] + envois[i] ;
}
envois[10] = envois[10]%256 ;
nbChar = 11 ;
HANDLE WifiAcess = INVALID_HANDLE_VALUE;
LPCSTR AcessGUID ;
char GuidString2Char[46] ;
char DefChar = ' ';
bool sendtOk = false ;
这里我们从 wifi 连接获取 Wlan 卡的 GUID
sprintf(GuidString2Char, "\\\\.\\{%08lX-%04hX-%04hX-%02hhX%02hhX-%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX}",
pIfInfo->InterfaceGuid.Data1,
pIfInfo->InterfaceGuid.Data2,
pIfInfo->InterfaceGuid.Data3,
pIfInfo->InterfaceGuid.Data4[0],
pIfInfo->InterfaceGuid.Data4[1],
pIfInfo->InterfaceGuid.Data4[2],
pIfInfo->InterfaceGuid.Data4[3],
pIfInfo->InterfaceGuid.Data4[4],
pIfInfo->InterfaceGuid.Data4[5],
pIfInfo->InterfaceGuid.Data4[6],
pIfInfo->InterfaceGuid.Data4[7]);
将翻译后的 GUID 放入 LPCSTR 中
AcessGUID = GuidString2Char ;
然后创建句柄
WifiAcess = CreateFile(
AcessGUID ,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
(HANDLE)INVALID_HANDLE_VALUE); // NULL
检查错误
if(WifiAcess == INVALID_HANDLE_VALUE)
{
dwResult = GetLastError();
switch(dwResult)
{
case ERROR_FILE_NOT_FOUND :
wprintf(L"\t\t\CreateFile ERROR_FILE_NOT_FOUND\n");
break ;
default :
wprintf(L"\t\t\CreateFile default\n");
break;
}
}
else { wprintf(L"\t\t\CreateFile Success\n"); }
尝试在WifiAccess句柄上写入缓冲区
sendtOk = WriteFile(WifiAcess, envois, nbChar, &bytesSend, NULL) ;
if(!sendtOk)
{
wprintf(L"\n\t\t\tEcheque de l envois : %d bytes envoyes\n\n", bytesSend);
dwResult = GetLastError();
switch(dwResult)
{
///////////////////////////////////////////////////////////////////////////////////////////////
case ERROR_INVALID_PARAMETER :
wprintf(L"\t\t\WriteFile ERROR_INVALID_PARAMETER\n");
break ;
///////////////////////////////////////////////////////////////////////////////////////////////
case S_FALSE :
wprintf(L"\t\t\WriteFile S_FALSE\n");
break ;
case E_UNEXPECTED :
wprintf(L"\t\t\WriteFile E_UNEXPECTED\n");
break ;
default :
wprintf(L"\t\t\WriteFile default with dword : 0x%x \n", dwResult);
break;
}
}else
{
wprintf(L"Data Sendt\n\n");
}
最佳答案
好吧,我发现哪里出了问题,不能使用串行 com 的类比,而是使用 winsock 类:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms738545(v=vs.85).aspx
============================================= ================================================ ====初始化:
WSADATA wsaData;
int iResult;
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed: %d\n", iResult);
return 1;
}
// ======================================================================================================
// Création du Socket :
struct addrinfo *result = NULL,
*ptr = NULL,
hints;
ZeroMemory( &hints, sizeof(hints) );
hints.ai_family = AF_INET ;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
#define DEFAULT_PORT "27015"
// Resolve the server address and port
iResult = getaddrinfo("10.10.100.254","8899" , &hints, &result); //"10.10.100.254" DEFAULT_PORT "8899"
if (iResult == 0) {
printf("\n\t\tgetaddrinfo, adresse trouvee\n");
struct addrinfo *res = NULL;
int error;
for (res = result; res != NULL; res = res->ai_next)
{
char hostname[NI_MAXHOST] = "";
error = getnameinfo(res->ai_addr, res->ai_addrlen, hostname, NI_MAXHOST, NULL, 0, 0);
if (error != 0)
{
fprintf(stderr, "error in getnameinfo: %s\n", gai_strerror(error));
continue;
}
if (*hostname != '\0')
{
printf("hostname: %s\n", hostname);
ptr=res;
}
}
}else
{
printf("getaddrinfo failed: %d\n", iResult);
WSACleanup();
return 1;
}
SOCKET ConnectSocket = INVALID_SOCKET;
// Attempt to connect to the first address returned by
// the call to getaddrinfo
// Create a SOCKET for connecting to server
ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol);
if (ConnectSocket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
freeaddrinfo(result);
WSACleanup();
return 1;
}
// ======================================================================================================
// Connect to a socket :
iResult = connect( ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);
if (iResult == SOCKET_ERROR) {
wprintf(L"socket function failed with error: %ld\n", WSAGetLastError());
switch(WSAGetLastError())
{
case WSAEHOSTUNREACH:
wprintf(L"\n\t\tNo route to host. A socket operation was attempted to an unreachable host. See WSAENETUNREACH.\n");
break;
default:
break;
}
closesocket(ConnectSocket);
ConnectSocket = INVALID_SOCKET;
}
// Should really try the next address returned by getaddrinfo
// if the connect call failed
// But for this simple example we just free the resources
// returned by getaddrinfo and print an error message
freeaddrinfo(result);
if (ConnectSocket == INVALID_SOCKET) {
printf("Unable to connect to server!\n");
WSACleanup();
return 1;
}
// ======================================================================================================
// Send and recive data :
#define DEFAULT_BUFLEN 512
int recvbuflen = DEFAULT_BUFLEN;
char *sendbuf = "this is a test";
//char recvbuf[DEFAULT_BUFLEN];
// Send an initial buffer
for(int i = 0; i<100;i++)
{
if(sendCommand(ConnectSocket,i, i, 0, i)==-1) break;
Sleep(10);
}
// Disconnecting the Client : http://msdn.microsoft.com/en-us/library/windows/desktop/bb530743(v=vs.85).aspx
// shutdown the send half of the connection since no more data will be sent
iResult = shutdown(ConnectSocket, SD_SEND);
if (iResult == SOCKET_ERROR) {
printf("shutdown failed: %d\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return 1;
}
// cleanup
closesocket(ConnectSocket);
WSACleanup();
这对我有用
关于c++ - 写入文件,ERROR_INVALID_PARAMETER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22882301/
我正在尝试通过 wifi 连接将数据发送到接收器以进行实验。我设法使用适用于 wifi 的 Windows API Native 将卡连接到接收器。 我将卡的 GUID 存储在 pIfInfo 指针
我正在尝试使用 ReadFile 函数。这是我的代码: #define BUFFERSIZE 5 int main(int argc, char* argv[]) { OVERLAPPED o
我正在尝试执行 SetIpInterfaceEntry功能,但我总是得到 ERROR_INVALID_PARAMETER 结果。我想更改哪个确切参数并不重要,因为即使我不更改任何内容,我也会收到此错误
我使用 visual studio 2008 service pack1(9.0.30729.1)、windows 7 professional 64 位和 8 GB 内存运行我的应用程序 我的应用程
我的目标是从集群中获取文件名。为此,我使用函数 FSCTL_LOOKUP_STREAM_FROM_CLUSTER。使用它时,我收到错误 87,根据 MSDN,它代表 ERROR_INVALID_PAR
我正在尝试获取 betfair API使用 Windows API。 我无法尝试使用以下代码登录(用户名和密码已更改)。 char *headers = "X-Application: MakJhSA
在尝试读取和获取事件日志中的事件数时,出现错误 87。 #include #include #include #define PROVIDER_NAME "System" void wmain(
Windows 嵌入式紧凑型。 Trying to send and receive a message with MsgQueue. 看起来写入工作正常但读取给出了不正确的参数错误。 知道缺少什么吗
CryptHashData ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa380202(v=vs.85).aspx) 一直返
重现我的问题的示例代码: #include #include int main() { using namespace std; HANDLE hdl = CreateFile("test
此代码在 Windows 7 上启动时完全没问题: HANDLE hVol = CreateFile(L"\\\\.\\c:", GENERIC_WRITE | GENERIC_READ,
我为 NtWriteFile 做了一个简单的包装,但我遇到了来自 NtWriteFile 的错误。这是我的代码: BOOL WINAPI WriteFile(HANDLE hFile, PVOID l
DnsQueryConfig的文档在这里: https://docs.microsoft.com/en-us/windows/win32/api/windns/nf-windns-dnsqueryco
我一直在开发一个使用 winapi 获取管理员组成员的应用程序。为此,我使用了 NetLocalGroupGetMembers 方法。我的问题是当我尝试释放缓冲区的堆空间时,我从 NetApiBuff
我的程序创建了一个邮槽,但是当我调用 ReadFile 时,我得到了 ERROR_INVALID_PARAMETER。 参数不对怎么办? 程序代码: SECURITY_DESCRIPTOR sd;
我在调用 AttachThreadInput() 时得到一个 ERROR_INVALID_PARAMETER 错误代码。这是代码块: HWND hwnd = MYFINDWINDOW::FindWin
我正在尝试使用 LsaCallAuthenticationPackage 从缓存中清除特定票证。我总是在包状态中得到 ERROR_INVALID_PARAMETER 87。可能是什么原因?这是我的
我在下面编写了这段代码,它在 code::blocks 下运行良好,使用 mingw gcc 4.7 进行编译。从那以后,我决定开始使用 Visual Studio 2013 Express。现在调用
我正在调用 Windows 事件跟踪 StartTrace功能: StartTrace(sessionHandle, KERNEL_LOGGER_NAME, sessionProperties); 失
我正在尝试使用 EvtQuery 读取 Windows 事件日志和 winapi crate . 我收到系统错误 87 - ERROR_INVALID_PARAMETER fn to_vec(str:
我是一名优秀的程序员,十分优秀!