忍者ブログ
ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
[439]  [438]  [437]  [436]  [435]  [434]  [433]  [432]  [431]  [430]  [429
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ExcelRTCのPython移植ですが、7割ぐらい出来ました。
マルチスレッドを使用したときの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)

そして別のスレッドでアンマーシャリングを行えば、そのスレッドで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))

これで一応Wordの操作ができてはいます。
メインスレッド+実行コンテキストのスレッドの2つなら特に問題はないのですが、コネクタコールバック等さらに別のスレッドから操作しようとすると動作できないみたいです。

詳しい人がいれば教えてください。









にほんブログ村 科学ブログ ロボットへ
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・

人気ブログランキングへ
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
フリーエリア
最新CM
[08/31 ysuga]
[08/31 Nobu]
[08/31 ysuga]
[12/11 Nobu]
[12/11 Kanamura]
最新TB
プロフィール
HN:
Nobu
年齢:
36
性別:
男性
誕生日:
1988/09/22
職業:
あれ
趣味:
妄想、自堕落
バーコード
ブログ内検索
P R
カウンター
忍者ブログ [PR]