Ciao a tutti , scusate la domanda , ho creato un memory map file senza file fisico , lo creo con un codice C# e lo vado a leggere con un altro linguaggio , un po "antico "similare al c++ , funziona tutto , il problema e' che mi ritorna anziche la stringa che voglio , mi ritorna tutta una serie di caratteri ????????? , ne deduco che sia un problema di codifica , ora so che il linguaggio "antico", non digerisce tanto bene l unicode perquesto dentro il codice C# ho fatto l encode in ASCII , ma mi ritorna ugualmente la stessa zuppa , al che ho fatto una prova in C++ anziche in C# , e con C++ lavora bene , ma ovviamente lo devo fare in C# , quindi ero a chiedere se a qualcuno piu esperto fosse capitata una cosa del genere e se si come abbia risolto allego anche i codici C# e C++
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.MemoryMappedFiles;
using System.ComponentModel;
using System.Windows.Input;
using System.IO;
namespace MemoryMappedCS_1
{
class Program
{
static void Main(string[] args)
{
var file = MemoryMappedFile.CreateOrOpen("Test", 1000,MemoryMappedFileAccess.ReadWrite);
try
{
byte[] de = Encoding.ASCII.GetBytes("Demade");
MemoryMappedViewAccessor accessor = file.CreateViewAccessor();
accessor.Write(0, (char)de.Length);
accessor.WriteArray(0,de,0,de.Length);
}
catch
{
}
Console.WriteLine("Run memory mapped file reader before exit");
Console.WriteLine("Press any key to exit ...");
Console.ReadLine();
}
}
}
C++
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
#define BUF_SIZE 1000
TCHAR szName[] = TEXT("Test");
TCHAR szMsg[] = TEXT("Message from first process.");
int _tmain()
{
HANDLE hMapFile;
LPCTSTR pBuf;
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size (high-order DWORD)
BUF_SIZE, // maximum object size (low-order DWORD)
szName); // name of mapping object
if (hMapFile == NULL)
{
_tprintf(TEXT("Could not create file mapping object (%d).\n"),
GetLastError());
return 1;
}
pBuf = (LPTSTR)MapViewOfFile(hMapFile, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
BUF_SIZE);
if (pBuf == NULL)
{
_tprintf(TEXT("Could not map view of file (%d).\n"),
GetLastError());
CloseHandle(hMapFile);
return 1;
}
CopyMemory((PVOID)pBuf, szMsg, (_tcslen(szMsg) * sizeof(TCHAR)));
_getch();
UnmapViewOfFile(pBuf);
CloseHandle(hMapFile);
return 0;
}
grazie in anticipo a chiunque avra il tempo di darmi una mano
saluti