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

  • Автор темы Автор темы d0zlove
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
10 Апр 2022
Сообщения
101
Реакции
8
код на python:
Код:
Expand Collapse Copy
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++
Код:
Expand Collapse Copy
#include <iostream>
#include <string>

extern "C" {
    __declspec(dllexport) const char* getString() {
        std::string popa = "Hello World!";
        return popa.c_str();
    }
}
 
тут разве нужен декод?
 
у тебя код на с++ точно правильно написан?
 
код на python:
Код:
Expand Collapse Copy
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++
Код:
Expand Collapse Copy
#include <iostream>
#include <string>

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


1699564456969.png
 
код на python:
Код:
Expand Collapse Copy
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++
Код:
Expand Collapse Copy
#include <iostream>
#include <string>

extern "C" {
    __declspec(dllexport) const char* getString() {
        std::string popa = "Hello World!";
        return popa.c_str();
    }
}
чтобы правильно передать строку из C++ в Python лучше использоват динамическую память чтобы после заверешния строчка могла дальше существовать
C++:
Expand Collapse Copy
#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';
    }
}
 
Назад
Сверху Снизу