• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z kompilacją kodu C++, Visual Studio

Object Storage Arubacloud
0 głosów
1,861 wizyt
pytanie zadane 14 sierpnia 2019 w C i C++ przez Mavimix Dyskutant (8,390 p.)

Mam taki kod:

// aplikacja.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


//------------------------------------------------------------------------------
//
//  SimConnect Data Request Sample
//  
//	Description:
//				After a flight has loaded, request the lat/lon/alt of the user 
//				aircraft
//------------------------------------------------------------------------------

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <strsafe.h>
#include <cmath>
#include <iostream>

float okolo(float a) {
	return round(a * 100) / 100;
}

#include "SimConnect.h"

int     quit = 0;
HANDLE  hSimConnect = NULL;

struct Struct1
{
    double  skret;
    double  przechyl;
};

static enum EVENT_ID{
    EVENT_SIM_START,
};

static enum DATA_DEFINE_ID {
    DEFINITION_1,
};

static enum DATA_REQUEST_ID {
    REQUEST_1,
};

void CALLBACK MyDispatchProcRD(SIMCONNECT_RECV* pData, DWORD cbData, void *pContext)
{
    HRESULT hr;
    
	SIMCONNECT_RECV_EVENT *evt = (SIMCONNECT_RECV_EVENT*)pData;

	// Now the sim is running, request information on the user aircraft
     hr = SimConnect_RequestDataOnSimObjectType(hSimConnect, REQUEST_1, DEFINITION_1, 0, SIMCONNECT_SIMOBJECT_TYPE_USER);
                    

	switch(pData->dwID)
    {
        		
        case SIMCONNECT_RECV_ID_SIMOBJECT_DATA_BYTYPE:
        {
            SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE *pObjData = (SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE*)pData;
            
            switch(pObjData->dwRequestID)
            {
                case REQUEST_1:
                {
                    DWORD ObjectID = pObjData->dwObjectID;
                    Struct1 *pS = (Struct1*)&pObjData->dwData;

                    printf("\nSkret=%f  Przechyl=%f", okolo(pS->skret), okolo(pS->przechyl));
                }
            }
        }
	}
}

using namespace std;

int __cdecl _tmain(int argc, _TCHAR* argv[])
{
	static DCB dcb;
	static HANDLE hNumPort;
	static char lpBuffor_read[33], lpBuffor_write[33];
	static DWORD RS_ile;

	hNumPort = CreateFile("COM3", GENERIC_WRITE |
		GENERIC_READ, 0, NULL,
		OPEN_EXISTING, 0, NULL);

	dcb.DCBlength = sizeof(dcb);

	dcb.BaudRate = CBR_19200;
	dcb.fParity = FALSE;
	//dcb.Parity = EVENPARITY;
	dcb.StopBits = ONESTOPBIT;
	dcb.ByteSize = 8;

	dcb.fDtrControl = DTR_CONTROL_ENABLE;
	dcb.fRtsControl = RTS_CONTROL_ENABLE;

	dcb.fOutxCtsFlow = FALSE;
	dcb.fOutxDsrFlow = FALSE;
	dcb.fDsrSensitivity = FALSE;
	dcb.fAbortOnError = FALSE;
	dcb.fOutX = FALSE;
	dcb.fInX = FALSE;
	dcb.fErrorChar = FALSE;
	dcb.fNull = FALSE;

	HRESULT hr;

	if(SUCCEEDED(SimConnect_Open(&hSimConnect, "Request Data", NULL, 0, 0, 0)))
	{
		printf("\nConnected to Flight Simulator!");

		// Set up the data definition, but do not yet do anything with it
		hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINITION_1, "PLANE BANK DEGREES", "Degrees");
		hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINITION_1, "PLANE PITCH DEGREES", "Degrees");

		// Request an event when the simulation starts
		hr = SimConnect_SubscribeToSystemEvent(hSimConnect, EVENT_SIM_START, "SimStart");

		while (1) //while( 0 == quit )
		{
			SimConnect_CallDispatch(hSimConnect, MyDispatchProcRD, NULL);
			Sleep(1000); //1

			if (SetCommState(hNumPort, &dcb))
			{
				//double toSend = 5/7;

				//strcpy(lpBuffor_write, toSend);// Niech to będzie przykładowe polecenie dla urządzenia
				//WriteFile(hNumPort, lpBuffor_write, strlen(lpBuffor_write), &RS_ile, 0);

			}
			else printf("Nie da sie wyslac");

			CloseHandle(hNumPort);
		}

		hr = SimConnect_Close(hSimConnect);
	}
	else printf("Nie da sie poloczyc");

	return 0;
}

Aplikacja powinna się łączyć z grą, odczytać pozycję pojazdu i wysłać ją do mikrokontrolera. Sam kod wysyłania i sam kod wczytywania pozycji działają bez zarzutu, gdy połącze je do jednego programu i spróbuję skompilować pojawia mi się taki błąd:


1. Błąd (aktywny)    E0167    argument typu "const char *" jest niezgodny z parametrem typu "LPCWSTR"  linia 90
2. Błąd    C2664     „HANDLE CreateFileW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE)”: nie można dokonać konwersji argumentu 1 z „const char [5]” do „LPCWSTR”    ApkaFSX linia 90    
 

Co jest nie tak?

2
komentarz 14 sierpnia 2019 przez Patrycjerz Mędrzec (192,320 p.)
Rozumiem, że na Stack Overflow znajdziesz odpowiedzi na prawie wszystkie pytania, ale to nie oznacza, że nasze forum ma stać się nagle agregatorem linków do tego serwisu. Przecież można wyrazić te same informacje, ale własnymi słowami. No i od tego jest sekcja odpowiedzi, nie komentarzy.
1
komentarz 14 sierpnia 2019 przez tkz Nałogowiec (42,000 p.)
Zawsze mogę to skopiować, ale po co? Nie rozumiem i nie znam sensu kopiowania tego, tylko, że po przetłumaczeniu, Rozumiem gdyby problem był bardziej zawiły, albo autor pytania nie rozumiał tego co tam widnieje. Skoro nikt się nie pyta o nieścisłości, to nie ma problemu.
komentarz 14 sierpnia 2019 przez Patrycjerz Mędrzec (192,320 p.)
Rozumiem, nikt ci tego nie zabroni robić (regulamin nic o tym nie wspomina), uważam tylko, że to nieco nieeleganckie wrzucić link bez słowa jakiegokolwiek opisu.

1 odpowiedź

0 głosów
odpowiedź 14 sierpnia 2019 przez tangarr Mędrzec (154,860 p.)

Twoje wywołanie CreateFile tak naprawdę używa funkcji CreateFileW.
Funkcja CreateFileW przyjmuje napis UTF16 (wide char).
Masz dwie opcje: możesz użyć fukcji CreateFileA lub przekazać napis w prawidłowym formacie (używając L"")

hNumPort = CreateFile(L"COM3", GENERIC_WRITE |
        GENERIC_READ, 0, NULL,
        OPEN_EXISTING, 0, NULL);

 

Podobne pytania

0 głosów
1 odpowiedź 1,023 wizyt
0 głosów
1 odpowiedź 372 wizyt
0 głosów
1 odpowiedź 210 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...