メッセージと遅延をパラメータとして受け取るメソッドを持つ.Net COMサーバーがあります。遅延後、メッセージをクライアントに送り返すイベントを発生させます。FoxProクライアントから.Net COMサーバーを消費するときにタイプライブラリが見つかりません。
.NetとVB6クライアントで動作します。
FoxProでバインドするCOMイベントを取得するためには、あなたがここで説明するように、FoxProとワイヤーそれをでイベントインターフェイスを実装するクラスを作成する必要があります。 http://www.west-wind.com/presentations/dotnetfromVfp/DotNetFromVfp_EventHandling.asp
私は、このようなクラスを持っています:
DEFINE CLASS ComEventHandler AS session OLEPUBLIC
IMPLEMENTS IComServerEvents IN "PcaTest.ComServer"
* "C:\ComTest\PCATest.tlb"
PROCEDURE IComServerEvents_TimerExpired(message AS STRING) AS VOID
* add user code here
?message
ENDPROC
ENDDEFINE
そして、これを配線するためのコード:
loMM = CREATEOBJECT("PcaTest.ComServer")
loEvents = CREATEOBJECT("ComEventHandler")
EventHandler(lomm, loevents)
私はこのコードを実行すると、私はタイプライブラリPcaTest.ComServerを取得見つかりません。私はハードコードTLBの場所することはできません
IMPLEMENTS IComServerEvents IN "C:\ComTest\PCATest.tlb"
:予想通り、私はに実装ラインを変更した場合しかし、それは動作します。
"CREATEOBJECT(" PcaTest.ComServer ")"という行は実際にはうまく動作しますが、ComEventHandlerオブジェクトをインスタンス化しようとしないとCOMオブジェクトがインスタンス化され、そのメソッドを呼び出してそのプロパティにアクセスできます。イベントハンドラクラスは(ほとんど)私が.tlbを供給しprogIdを供給しないときにのみ動作します。
.Net COMサーバーは、GACに登録されています。私は/コードベースの有無にかかわらず、/ tlbまたは/ tlb:ファイル名.tlbを付けて/なしで試しました
私はこれを一点でテストしていました。私はそれらの結果を今複製することはできませんが、私はそれが働いていたときに/ codebaseと/tlb:filename.tlbを使用しました。
私はFoxPro n00bです。私はImplementsラインがfxpにコンパイルされ、実行時に解釈されないと仮定していました。パスを調べなければならない場合は、レジストリをチェックしてマシンごとに異なる可能性があります。 (プログラムファイルとプログラムファイル(x86)) しかし、私はそれをやりたいとは思っていませんでした。なぜなら、少なくとも2回は正常に動作していたからです。 –