Avatar billede centauri Nybegynder
01. november 2011 - 10:22 Der er 10 kommentarer

Ældre C++ Program til Nyere Consol Applikation i VS C++ 2010 Konverterings problem

Hej

Jeg er løbet ind i et mindre problem med et ændre C++ applikation jeg skal have lavet nogle ændringer i og i den omgang prøvede at flyttet det over i Visual Studio C++ 2011 Express.

Jeg er desværre meget ude af øvelse i C++ så håber på en venlig sjæl her.

Det er et original program fra leverandøren af en Telefon anlæg der modtager data via Multicast. Som jeg bare vil ændre i så den gemmer dataene i en XML fil istedet for at udskrive dem på skærmen.

Men den kommer med en del fejl når jeg vil Kompilere det med nogle ting der ikke kan konvertere imellem de forskellige data typer.

Som Bla.
cpp(320): error C2664: 'wcslen' : cannot convert parameter 1 from 'unsigned short [21]' to 'const wchar_t *'
1>          Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Håber der er en vejlig sjæl der evt vil hjælpe mig med at konvertere det så det kan virke i Visual Studio 2010.

Den originale koldekolde kan hentes her.
http://www.centauri.dk/mRcv.zip

Og mit forsøg i Visual Studio er at finde her.
http://www.centauri.dk/CCE_Log3.zip

På forhånd tak for hjælpen.
Avatar billede bertelbrander Praktikant
01. november 2011 - 20:21 #1
Først:
Project | Settings | C/C++ | Language | Treat wchar_t as Built-in Type = No

Dernæst, lav denne linje (ca. 316):
for (int i = 0;i < wcslen(NImcHdr->ServerID);i++)
Om til:
int i;
for (i = 0;i < wcslen(NImcHdr->ServerID);i++)

Så burde det kunne oversætte.
Avatar billede centauri Nybegynder
01. november 2011 - 21:13 #2
Tak for svaret det hjalp på en del af det men nu får jeg desværre følgende fejl jeg slet ikke kan se mig ud af.

Generating Code...
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _shutdown@8 referenced in function _wmain
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _ntohs@4 referenced in function _wmain
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _recvfrom@24 referenced in function _wmain
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _inet_ntoa@4 referenced in function _wmain
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _gethostbyname@4 referenced in function _wmain
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _WSACleanup@0 referenced in function _wmain
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _gethostname@8 referenced in function _wmain
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _inet_addr@4 referenced in function _wmain
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _bind@12 referenced in function _wmain
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _closesocket@4 referenced in function _wmain
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _setsockopt@20 referenced in function _wmain
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _htonl@4 referenced in function _wmain
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _htons@4 referenced in function _wmain
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _socket@12 referenced in function _wmain
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _WSAGetLastError@0 referenced in function _wmain
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _WSAStartup@8 referenced in function _wmain
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _ntohl@4 referenced in function "void __cdecl printPacket(char *)" (?printPacket@@YAXPAD@Z)
1>CCE_Log3.obj : error LNK2019: unresolved external symbol _uncompress referenced in function "void __cdecl printPacket(char *)" (?printPacket@@YAXPAD@Z)
1>C:\Users\Administrator\documents\visual studio 2010\Projects\CCE_Log3\Debug\CCE_Log3.exe : fatal error LNK1120: 18 unresolved externals

Kan du også se hvad der kan være galt der.
Avatar billede bertelbrander Praktikant
01. november 2011 - 22:01 #3
Du mangler at linke til mindst ét bibliotek -> ws2_32.lib
Avatar billede centauri Nybegynder
02. november 2011 - 08:38 #4
Det er da utroligt som man lærer nye ting.
Det hjalp lidt, men fik en anden fejl men den kunne jeg løse ved også at linke til zlib.lib

Men programmet kan nu kompilere men kan bare ikke starte der kommer den med nogle mærkelige fejl. Så må være nogle ting der bare ikke virker på en nyere version så må se om jeg kan skaffe en ændre compiler.
Den kan åbenbart ikke binde sig til netkortet.

Men hvis du ligger et svar kan du få pointene for du hjalp jo med at få det compileret da det så stadig ikke virker kan jeg nok desværre ikke gøre så meget ved.
Avatar billede centauri Nybegynder
02. november 2011 - 13:30 #5
Er åbenbart nået lidt længere med mi problem.
Det viser sig den ikke udlæser IP Adressen korrekt fra INI filen af.
Men Port nummeret bliver korrekt udlæst.
Så må være der fejlen ligger så er bare lige at ændre det jeg må rode lidt videre med.
Avatar billede centauri Nybegynder
02. november 2011 - 14:28 #6
Det lader til IP Adressen udlæses forkert med denne kode.

char SrcMCast[20];

GetCurrentDirectoryA(sizeof(pathStr), pathStr);
strcat(pathStr, "\\mrcv.ini");

GetPrivateProfileStringA("MCast", "IP", "230.0.0.2", SrcMCast, sizeof(SrcMCast), pathStr);
_tprintf(TEXT("Multicast Address: %s\n"), SrcMCast);

Den læser IP fra INI Filen som e.eks indeholder
[MCast]
IP=230.0.0.1
Port=6055

Programmets output er:
Multicast Address: ????1

Så den læser det åbenbart ikke rigtig den viser kun de sidste ciffer hver gang og det samme hvis jeg ændre
char SrcMCast[20];
til
char SrcMCast[20] = "230.0.0.1";

Så jeg er virkelig ret lost der.
Avatar billede bertelbrander Praktikant
02. november 2011 - 22:37 #7
Jeg lavede et lille program, det læser fint IP-Adressen:
#include <stdio.h>
#include <string.h>
#include <windows.h>
int main()
{
  char SrcMCast[20];
  char pathStr[256];
  GetCurrentDirectory(sizeof(pathStr), pathStr);
  strcat(pathStr, "\\mrcv.ini");
  GetPrivateProfileStringA("MCast", "IP", "230.0.0.2", SrcMCast, sizeof(SrcMCast), pathStr);
  printf("Multicast Address: %s\n", SrcMCast);
}
Prøv at udskrive pathStr, peger den det rigtige sted hen?

Jeg undrer mig lidt over at du bruger GetPrivateProfileStringA og ikke GetPrivateProfileString og at du bruge tprintf og TEXT("..."), det kunne tyde på at der er problemer med char-set...
Avatar billede centauri Nybegynder
03. november 2011 - 09:05 #8
Det lader ikke til at køre med GetCurrentDirector da får jeg følgende fejl.

error C2664: 'GetCurrentDirectoryW' : cannot convert parameter 2 from 'char [255]' to 'LPWSTR'

Ved ikke om det har noget at sige men jeg kører det som en "Win 32 Consol Application" Og får også samme fejl hvis jeg sætter din kode ind.
Våde i Visual Studio 2005 og 2010

Hvis jeg i min oprindelige kode udskriver pathStr får jeg bare en masse ????????????

Og det samme hvis jeg udskriver IP Adressen som den skal læse fra INI Filen, men mærkeligt nok kan den godt udlæse Port Nummeret fra INI filen af og skrive den på skærmen.
Så er godtnok ved at være meget forvirret nu her.

Kan ikke fortælle hvorfor der bruges GetPrivateProfileStringA  og tprintf, da dette er en færdigt eksempel jeg har fra Nortel af der passer med deres telefon anlæg.
Avatar billede bertelbrander Praktikant
03. november 2011 - 21:43 #9
Prøv at checke:
Project options - Configuration Options - General - Character Set
Det bør stå til "Not set" eller "Use Multi Byte" og IKKE "Use Unicode".
Avatar billede centauri Nybegynder
04. november 2011 - 09:07 #10
Har efter hånden fået løst alle små problemer.

Det er åbenbart funktionen _tprintf der fejler med udskriften bruger jeg printf istedet for skriver den tingene korrekt ud. Og ændre jeg Character Set skriver den pludselig også den korrekte IP på det interne netkort den skal connecte via.

Men den fejler så med at connecte eller binde sig til port nummeret.
Så der er jeg nok kommet ud i noget jeg ikke kan og nok desværre heller ikke kommer til at kunne se mig ud af. Så nok nok desværre give op her.
Havde ellers troet det var nemt nok når man havde en færdigt kode eksemel. Og kun lige skulle lave ganske få ændringer i det.

Så er nok nået til et punkt hvor jeg må finde en der kan løse opgaven mod betaling.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester