Я написал код C++, который записывает карту файла, и он работает нормально, поскольку другая программа C++, которая должна читать данные карты, показывает правильная строка. Когда я попытался переписать код «чтения» на Python с помощью ctypes, я столкнулся с проблемой, когда Python аварийно завершает работу каждый раз, когда я пытаюсь получить доступ к значению данных ctypes.c_char_p. Когда я удаляю часть .value, программа успешно выполняется и печатает, я предполагаю, адрес указателя. См. код ниже. (*если есть лучший подход, не использующий другие библиотеки, или вы заметили какие-то ошибки или улучшения, которые я мог бы сделать здесь, сообщите об этом)
Код: Выделить всё
write.cpp - C++ code that creates a file map and writes "something".Код: Выделить всё
#include
#include
#include
int main(){
//Create a file map.
HANDLE fileMappingObject = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(char)*256, L"testingFileMapping");
//Creating a pointer to the data.
char *mapData = (char*)MapViewOfFile(fileMappingObject, FILE_MAP_WRITE, 0, 0, 0);
//Writing to the pointer 'something'
strcpy_s(mapData, 256, "something"); //write to
//Just making sure the program doesn't quit.
int tmp;
while(true){
std::cin >> tmp;
if(tmp == 0) break;
}
//Close - cleaning up
UnmapViewOfFile(mapData);
CloseHandle(fileMappingObject);
return 0;
}
Код: Выделить всё
read.cpp - C++ code that reads from a file map and prints "something" to the console.Код: Выделить всё
#include
#include
#include
int main(){
//create, or in this case, access an existing file map
HANDLE fileMappingObject = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(char)*256, L"testingFileMapping");
//get the pointer
char *mapData = (char*)MapViewOfFile(fileMappingObject, FILE_MAP_READ, 0, 0, 0);
//print the value;
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78474873/getting-c-char-p-value-from-a-file-map-causes-a-python-program-to-crash[/url]
Мобильная версия