Hey allemaal,
Na een paar dagen proberen/googlen en nog meer proberen richt ik me toch tot jullie met het volgende probleem. Ik heb redelijk wat C# kennis, een beetje C++. Ik heb een third-party C++ functie waar ik nu een C++.net wrapper omheen aan het bouwen ben. Deze functie heeft de volgende header :
Als ik het xml bericht uit een file lees (zo staat het in de docs) dan werkt het zonder problemen :
Echt wil ik deze functie nu aan kunnen roepen met een System::String als parameter. Ik heb echt werkelijk van alles geprobeerd om dezelfde inhoud in mijn 'buf' variable te krijgen als na het uitlezen van de file, maar ik mis hier gewoon een stukje kennis.
Wat ik dus wil is :
En dat dan Input wordt omgezet naar iets wat die functie wel hapt. Het stomme is dat ik voor de ServerName het volgende gebruik en dat werkt wel, maar met langere strings gaat het blijkbaar niet goed, want dan krijg ik alleen de eerste +/-250 characters.
Concreet is de vraag dus, hoe zet ik een System::String (met aardig wat inhoud, >4000 chars) om naar een char* die hetzelfde is als dat ik het met ReadFile uit een bestand op schijf lees.
Bedankt alvast!
Na een paar dagen proberen/googlen en nog meer proberen richt ik me toch tot jullie met het volgende probleem. Ik heb redelijk wat C# kennis, een beetje C++. Ik heb een third-party C++ functie waar ik nu een C++.net wrapper omheen aan het bouwen ben. Deze functie heeft de volgende header :
C++:
1
| XMLRequest( const char *szHostName, unsigned short UsPort, const int nNetTimeout, void *xml, int size); |
Als ik het xml bericht uit een file lees (zo staat het in de docs) dan werkt het zonder problemen :
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| char *buf DWORD dwSize; DWORD dwBytesRead; HANDLE hFile; if(INVALID_HANDLE_VALUE == (hFile = CreateFile("f:\output.xml", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL))) return 0; if(0xFFFFFFFF == (dwSize = ::GetFileSize(hFile, NULL))) return 0; buf = new char[dwSize + 1]; memset( buf, 0, dwSize+1 ); if(!ReadFile(hFile, buf, dwSize, &dwBytesRead, NULL)) return 0; CloseHandle(hFile); char* result = XMLRequest(cServer, Port, Timeout, buf, 0); |
Echt wil ik deze functie nu aan kunnen roepen met een System::String als parameter. Ik heb echt werkelijk van alles geprobeerd om dezelfde inhoud in mijn 'buf' variable te krijgen als na het uitlezen van de file, maar ik mis hier gewoon een stukje kennis.
Wat ik dus wil is :
C++:
1
| System::String* ProcessXml(System::String* Input, System::String* ServerName, int Port, int Timeout) |
En dat dan Input wordt omgezet naar iets wat die functie wel hapt. Het stomme is dat ik voor de ServerName het volgende gebruik en dat werkt wel, maar met langere strings gaat het blijkbaar niet goed, want dan krijg ik alleen de eerste +/-250 characters.
C++:
1
| char *cServer = (char*)(void*)Marshal::StringToHGlobalAnsi(ServerName); |
Concreet is de vraag dus, hoe zet ik een System::String (met aardig wat inhoud, >4000 chars) om naar een char* die hetzelfde is als dat ik het met ReadFile uit een bestand op schijf lees.
Bedankt alvast!
SIZE does matter.
"You're go at throttle up!"