2009-06-30 28 views
5

tôi cần phải truy cập vào một máy chủ COM của bên thứ ba với sau định nghĩa giao diện (IDL):Python win32 com: cách xử lý tham số 'out'?

interface IDisplay : IDispatch 
{ 
    HRESULT getFramebuffer (
    [in] ULONG aScreenId, 
    [out] IFramebuffer * * aFramebuffer, 
    [out] LONG * aXOrigin, 
    [out] LONG * aYOrigin); 
}; 

Như bạn thấy, nó sẽ trả về 3 giá trị qua [out] tham số modificators. Làm thế nào để xử lý này thông qua python win32 COM api? Ví dụ: tôi tạo một đối tượng và nhận IDisplay từ nó:

object = win32com.client.Dispatch("VirtualBox.VirtualBox") 
display = object.display 

Làm thế nào để gọi display.getFrameBuffer() để nó hoạt động? Tôi đã thử các cách khác nhau, nhưng luôn luôn 'loại không phù hợp' đối với đối số thứ hai ([out] cho IFrameBuffer)

Trả lời

8

Vì đó là các tham số, bạn không thể làm như sau?

Framebuffer, XOrigin, YOrigin = display.getFrameBuffer(ScreenId) 

Có một số tài liệu tham khảo tốt trong Python Programming on Win32 Chapter 12 Advanced Python and COM

Và họ chỉ ra rằng cú pháp nên giống như ở trên. Họ cũng đề cập đến sử dụng MakePy cho các đối tượng COM:

Có một số lý do tốt để sử dụng MakePy: (sao chép từ cuốn sách)

  • Giao diện Python để tự động hóa vật thể nhanh hơn cho các đối tượng được hỗ trợ bởi một mô-đun MakePy.

  • Bất kỳ hằng số nào được xác định bởi thư viện kiểu được cung cấp cho chương trình Python. Chúng tôi thảo luận chi tiết về hằng số COM sau trong chương này.

  • Có nhiều hỗ trợ tốt hơn cho các kiểu tham số nâng cao, cụ thể, các tham số được khai báo bởi COM như BYREF chỉ có thể được sử dụng với các đối tượng được hỗ trợ bởi MakePy. Chúng ta thảo luận về các tham số truyền sau trong chương này.

+0

Tôi đã thử, nó làm tăng 'số tham số không hợp lệ'. Tôi không chắc chắn làm thế nào để sử dụng MakePy nếu máy chủ COM là bên thứ ba. Nó được cài đặt trên hệ thống như là một máy chủ COM nhị phân và đăng ký. Có thể thay đổi API của nó không? – grigoryvp

3

Sử dụng các module makepy, gọi nó như sau:

>>> import win32com.client.makepy as makepy 
>>> makepy.main() 

Một cửa sổ sẽ mở ra với một danh sách các loại thư viện. Di chuyển đến "Virtual Box Type Library" và chọn nó, sau đó nhấp "OK". Một mô-đun Python sẽ được tạo ở một vị trí được in ra (thường là %TEMP%\gen_py\2.x\).

Lớp được tạo sẽ tự động được sử dụng bởi win32com.client.Dispatch, nhưng nếu bạn cần rõ ràng bạn có thể truy cập nó thông qua các chức năng trong mô-đun win32com.client.gencache.

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