ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ExcelRTCのPython移植ですが、7割ぐらい出来ました。
マルチスレッドを使用したときのWin32Comのプログラミングはかなり難しくかなり苦戦しています。マーシャリングが正直よくわかりません。僕みたいな素人にはなかなか厳しいです。
マニュアルを書く必要もあるのでそれなりに時間がかかりそうです。
まだまだマルチスレッドでのWin32Comの使い方がわかっていないのですが、今の所以下の方法を取っています。
まずはメインスレッドでCOM オブジェクトを作成します。
Application = win32com.client.Dispatch("Word.Application")
Documents = Application.Documents
Document =Documents.Open(filename)
次に以下のようにしてインターフェースのマーシャリングします。
そして別のスレッドでアンマーシャリングを行えば、そのスレッドでCOMオブジェクトが利用できるようになります。
pythoncom.CoInitialize()
これで一応Wordの操作ができてはいます。
メインスレッド+実行コンテキストのスレッドの2つなら特に問題はないのですが、コネクタコールバック等さらに別のスレッドから操作しようとすると動作できないみたいです。
詳しい人がいれば教えてください。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
マルチスレッドを使用したときのWin32Comのプログラミングはかなり難しくかなり苦戦しています。マーシャリングが正直よくわかりません。僕みたいな素人にはなかなか厳しいです。
マニュアルを書く必要もあるのでそれなりに時間がかかりそうです。
まだまだマルチスレッドでのWin32Comの使い方がわかっていないのですが、今の所以下の方法を取っています。
まずはメインスレッドでCOM オブジェクトを作成します。
Application = win32com.client.Dispatch("Word.Application")
Documents = Application.Documents
Document =Documents.Open(filename)
次に以下のようにしてインターフェースのマーシャリングします。
mApplication = pythoncom.CoMarshalInterThreadInterfaceInStream (pythoncom.IID_IDispatch, Application)
mDocuments = pythoncom.CoMarshalInterThreadInterfaceInStream (pythoncom.IID_IDispatch, Documents)
mDocument = pythoncom.CoMarshalInterThreadInterfaceInStream (pythoncom.IID_IDispatch,Document)
mDocuments = pythoncom.CoMarshalInterThreadInterfaceInStream (pythoncom.IID_IDispatch, Documents)
mDocument = pythoncom.CoMarshalInterThreadInterfaceInStream (pythoncom.IID_IDispatch,Document)
そして別のスレッドでアンマーシャリングを行えば、そのスレッドでCOMオブジェクトが利用できるようになります。
pythoncom.CoInitialize()
umApplication = win32com.client.Dispatch ( pythoncom.CoGetInterfaceAndReleaseStream (mApplication, pythoncom.IID_IDispatch))
umDocuments = win32com.client.Dispatch ( pythoncom.CoGetInterfaceAndReleaseStream (mDocuments, pythoncom.IID_IDispatch))
umDocument = win32com.client.Dispatch ( pythoncom.CoGetInterfaceAndReleaseStream (mDocument, pythoncom.IID_IDispatch))
umDocuments = win32com.client.Dispatch ( pythoncom.CoGetInterfaceAndReleaseStream (mDocuments, pythoncom.IID_IDispatch))
umDocument = win32com.client.Dispatch ( pythoncom.CoGetInterfaceAndReleaseStream (mDocument, pythoncom.IID_IDispatch))
これで一応Wordの操作ができてはいます。
メインスレッド+実行コンテキストのスレッドの2つなら特に問題はないのですが、コネクタコールバック等さらに別のスレッドから操作しようとすると動作できないみたいです。
詳しい人がいれば教えてください。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
この記事にコメントする