Получение значения c_char_p из карты файлов приводит к сбою программы PythonC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Получение значения c_char_p из карты файлов приводит к сбою программы Python

Сообщение Anonymous »

Я пытаюсь создать программу, которая будет принимать строку (const char[]) из приложения C++, создавать объект файла карты с помощью windows.h, в то время как отдельно запущенный скрипт Python будет читать объект файла карты и принимать указатель на строку и распечатайте его.
Я написал код 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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»