cuốn sách gpt4 ai đã làm

Giao tiếp giữa ứng dụng gốc và tiện ích mở rộng chrome

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 23:14:20 28 4
mua khóa gpt4 Nike

Tôi có một ứng dụng gốc được viết bằng C++ và tiện ích mở rộng chrome.

Tôi đang sử dụng "tin nhắn gốc của chrome" để liên lạc giữa chúng.

mã ứng dụng gốc:

int main(int argc, char* argv[]) {
unsigned int a, c, i, t=0;
std::string inp làm {
inp="";
t=0;
// Tính tổng 4 ký tự đầu tiên từ stdin (độ dài của tin nhắn được truyền).
vì (i = 0; tôi <= 3; i++) {
t += getchar();
}

// Vòng lặp getchar để kéo tin nhắn vào cho đến khi đạt được tổng số
// chiều dài được cung cấp.
cho (i=0; i < t; i++) {
c = getchar();
inp += c;
}

// Thu thập độ dài của tin nhắn
unsigned int len ​​​​= inp.length();
//// Chúng ta cần gửi thông tin có độ dài 4 btyes
std::cout << char(((len>>0) & 0xFF))
<< char(((len>>8) & 0xFF))
<< char(((len>>16) & 0xFF))
<< char(((len>>24) & 0xFF));
//// Bây giờ chúng ta có thể xuất thông báo của mình
std::cout << inp <<>
xả nước();
}while(cnt < 2 );
trả về 0 }

Ở đây tôi đang đọc tin nhắn được gửi bởi tiện ích mở rộng chrome trên stdin. và gửi lại tin nhắn tương tự bằng cách ghi nó vào đầu ra tiêu chuẩn.

Tiện ích mở rộng đang sử dụng PostMessage()

Điều này hoạt động ... nhưng ...

Khi tôi đặt chương trình vào vòng lặp while liên tục, quá trình này chỉ thực hiện một lần!

tức là port.postMessage({'text':'hello_1'}) được lặp lại như mong đợi, nhưng nếu tôi làm vậy

port.postMessage({'text':'hello_2'}) Nó không nhận được phản hồi.

Tôi không thể hiểu vấn đề là gì. Chủ đề có cần thiết không?

请帮忙!

Cảm ơn!

câu trả lời hay nhất

Câu trả lời của Marc có một số lỗi (được kế thừa từ câu hỏi) và không hoạt động đối với các thư có độ dài không vừa với một byte.

Giao thức của Chrome khi giao tiếp với các ứng dụng gốc là:

  • Nhận yêu cầu tới các ứng dụng gốc thông qua đầu vào tiêu chuẩn
  • Phản hồi tới Chrome được gửi qua đầu ra tiêu chuẩn
  • Chrome không xử lý tốt kiểu Windows \r\n vì vậy hãy tránh điều này trong tin nhắn và đặt chế độ stdin thành nhị phân (để bạn có thể đọc yêu cầu len ​​chính xác và \n không "chuyển" thành \r \n) :

    _setmode(_fileno(stdin),_O_BINARY);

Thông báo yêu cầu và phản hồi là JSON có tiêu đề 4 byte (uint32) chứa độ dài thông báo: [tiêu đề 4 byte][tin nhắn]

Đọc tiêu đề yêu cầu:

uint32_t reqLen = 0;
cin.read(reinterpret_cast(&reqLen) ,4);

Viết tiêu đề phản hồi:

cout.write(reinterpret_cast(&responseLen),4); 

Về giao tiếp giữa c++ - ứng dụng gốc và tiện ích mở rộng chrome, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/20220668/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress