해결된 질문
24.08.16 15:35 작성
·
42
·
수정됨
1
#include <iostream>
#include <string>
#include <emscripten.h>
#include <emscripten/bind.h>
using namespace std;
EM_JS(void, call_js, (const string subject, const string msg), {
console.log("Subject: js " + subject, UTF8ToString(msg));
console.log("Pointer: js " + msg, UTF8ToString(subject));
jsFunction(UTF8ToString(subject), UTF8ToString(msg));
});
bool my_calls()
{
const string subject = "제목";
const string msg = "메세지";
cout << "Subject: cpp " << subject << "\nPointer: cpp " << msg << endl;
call_js(subject, msg);
return true;
}
EMSCRIPTEN_BINDINGS(my_module)
{
emscripten::function("callJs", &my_calls);
}
UTF8ToString으로 변환할때 포인터와 length로 변환하야하나요?
string 타입을 직접 utf8로 변환해도 되는것 같은데 해당방식으로 문제가 생길 수 있는지 궁금합니다.
답변 1
0
2024. 08. 16. 15:56
안녕하세요. geekgleeguru 님,
UTF8ToString은 Emscripten의 메모리에서 특정 포인터를 가져와 문자열로 변환합니다. 그러나 C++의 std::string 객체를 이 방법으로 처리하려고 하면 문제가 발생할 수 있습니다.
std::string은 메모리 내에서 문자열을 보관하며, 직접 포인터와 길이를 사용하여 접근하는 것이 아닙니다. C++에서 JavaScript로 문자열을 전달할 때는 보통, std::string 객체의 .c_str() 메서드를 사용하여 문자 열의 C 스타일 포인터를 얻고, JavaScript에서는 이를 적절히 처리합니다.
위와 같이 사용하면 문자열을 전달할 수 있습니다. 아래는 C++ 문자열을 JavaScript로 전달하고, JavaScript에서 이를 올바르게 처리하는 수정된 코드 예시입니다.
#include <iostream>
#include <string>
#include <emscripten.h>
#include <emscripten/bind.h>
using namespace std;
EM_JS(void, call_js, (const char* subject, const char* msg), {
console.log("Subject: js " + UTF8ToString(subject));
console.log("Pointer: js " + UTF8ToString(msg));
jsFunction(UTF8ToString(subject), UTF8ToString(msg));
});
bool my_calls()
{
const string subject = "제목";
const string msg = "메세지";
// printf("Subject: %s\nPointer: %s\n", subject.c_str(), msg.c_str());
cout << "Subject: cpp " << subject << "\nPointer: cpp " << msg << endl;
call_js(subject.c_str(), msg.c_str());
return true;
}
EMSCRIPTEN_BINDINGS(my_module)
{
emscripten::function("callJs", &my_calls);
}
혹시 더 궁금한게 있으면 언제든지 질문해주세요.
감사합니다. 김대진 드림.
2024. 08. 16. 16:24
빠른답변 감사합니다