2011-12-13 17 views
5

Đây là vấn đề của tôi: Tôi có một ứng dụng Win32 của bên thứ ba đóng nguồn, hoạt động như một máy chủ cho các chương trình khác thông qua các đường ống được đặt tên, tức là khách hàng mong muốn làm như thế này:WINE và Windows có tên là

HANDLE h = CreateFile("\\\\.\\pipe\\$pipe_name$", GENERIC_READ | GENERIC_WRITE, etc...); 
// ... 
TransactNamedPipe(h, buf, etc...); 
// ... 
CloseHandle(h); 

Ứng dụng này chạy hoàn toàn bằng RƯỢU, ngoại trừ việc tôi không thể liên lạc với nó. Vì vậy, đây là câu hỏi của tôi:

RƯỢU VANG chính xác làm gì khi được yêu cầu mở một đường ống? Liệu nó, nói, bản đồ nó vào một số tập tin FIFO trong ~/.wine/hoặc bất cứ nơi nào? Có bất kỳ cách nào để liên lạc với chương trình như vậy từ một ứng dụng Linux không? Google không biết gì về nó.

Cảm ơn bạn.

Trả lời

2

ống tên được lưu trữ bởi quá trình máy chủ WINE. Yêu cầu được gửi đến quy trình này bởi khách hàng WINE. Ví dụ: CreateNamedPipe sử dụng yêu cầu như:

SERVER_START_REQ(open_file_object) 
    { 
     req->access  = access; 
     req->attributes = attr->Attributes; 
     req->rootdir = wine_server_obj_handle(attr->RootDirectory); 
     req->sharing = sharing; 
     req->options = options; 
     wine_server_add_data(req, attr->ObjectName->Buffer, attr->ObjectName->Length); 
     io->u.Status = wine_server_call(req); 
     *handle = wine_server_ptr_handle(reply->handle); 
    } 

Máy chủ quản lý kết nối đường ống được đặt tên. Khi một máy khách và máy chủ đã kết nối, máy chủ WINE sẽ bị loại bỏ bằng cách gửi một fd tới máy khách. Tôi nghĩ rằng fd này chỉ là một đường ống ẩn danh được tạo ra bởi máy chủ WINE, một đầu được gửi đến máy chủ đường ống và một đầu cho máy khách ống.

+0

Điều đó có nghĩa là nó chỉ có thể giao tiếp với ứng dụng Win bên trong môi trường Rượu? Tôi chỉ không hiểu làm thế nào để "phá vỡ bức tường" giữa môi trường này và bản địa Linux. – ScumCoder

+0

Có, bạn sẽ phải nói chuyện với máy chủ WINE theo một cách nào đó để truy cập vào đường ống. –

+0

Cảm ơn bạn, tôi sẽ xem những gì tôi có thể làm. – ScumCoder

Các vấn đề liên quan