Вопрос Не выводится строка из c++ в python

Начинающий
Статус
Оффлайн
Регистрация
10 Апр 2022
Сообщения
85
Реакции[?]
8
Поинты[?]
4K
код на python:
Код:
import ctypes

my_lib = ctypes.cdll.LoadLibrary("my_lib.dll")

my_lib.getString.restype = ctypes.c_char_p

popa = my_lib.getString()
popa_str = popa.decode("utf-8")

print(popa_str)
код на c++
Код:
#include <iostream>
#include <string>

extern "C" {
    __declspec(dllexport) const char* getString() {
        std::string popa = "Hello World!";
        return popa.c_str();
    }
}
 
я сырок со вкусом вишни
Пользователь
Статус
Оффлайн
Регистрация
31 Июл 2021
Сообщения
253
Реакции[?]
49
Поинты[?]
22K
у тебя код на с++ точно правильно написан?
 
PoC Life
Пользователь
Статус
Оффлайн
Регистрация
22 Авг 2022
Сообщения
370
Реакции[?]
48
Поинты[?]
38K
код на python:
Код:
import ctypes

my_lib = ctypes.cdll.LoadLibrary("my_lib.dll")

my_lib.getString.restype = ctypes.c_char_p

popa = my_lib.getString()
popa_str = popa.decode("utf-8")

print(popa_str)
код на c++
Код:
#include <iostream>
#include <string>

extern "C" {
    __declspec(dllexport) const char* getString() {
        std::string popa = "Hello World!";
        return popa.c_str();
    }
}
1699564438236.png

1699564456969.png
 
Начинающий
Статус
Оффлайн
Регистрация
20 Май 2020
Сообщения
84
Реакции[?]
3
Поинты[?]
0
код на python:
Код:
import ctypes

my_lib = ctypes.cdll.LoadLibrary("my_lib.dll")

my_lib.getString.restype = ctypes.c_char_p

popa = my_lib.getString()
popa_str = popa.decode("utf-8")

print(popa_str)
код на c++
Код:
#include <iostream>
#include <string>

extern "C" {
    __declspec(dllexport) const char* getString() {
        std::string popa = "Hello World!";
        return popa.c_str();
    }
}
чтобы правильно передать строку из C++ в Python лучше использоват динамическую память чтобы после заверешния строчка могла дальше существовать
C++:
#include <iostream>
#include <string>
#include <cstring>

extern "C" {
    __declspec(dllexport) void getString(char* buffer, int bufferSize) {
        std::string popa = "Hello World!";
        strncpy(buffer, popa.c_str(), bufferSize);
        buffer[bufferSize - 1] = '\0';
    }
}
 
Сверху Снизу