前提
DataRay社製ビームプロファイラーWinCamDをUI Automation
を絡めたシステムで利用せねばならない状況です。
その前提で開発を行おうとしていますが、DataRay社のOCXがC#に対応していないようで、UI Automation
も類似の技術がC++だとほぼ情報がないため頭を痛めている状況です。
OCXはVisual Studio
のAxHost
による変換で利用できる可能性があると知ったのでC# Formアプリ
で開発することにしました。
OCXコントロールをデザイナでFormに貼り付けることは出来ました。
現象
ところがGetData
というコントロールのIsDataReady()
を実行した際にメソッドが見つかりません:'Boolean DATARAYOCXLib_DGetData IsDataReady(Int16)'
というMissingMethidException
例外が発生し途方にくれています。
まさか呼び出しているIsDataReady()
の定義がAxGetData.cs
に生成されていないのかと思い見てみると
c#
1 2namespace AxDATARAYOCXLib 3{ 4 [Clsid("{43555bb9-3fe0-11d6-9f4a-00a0cc40a4d2}")] 5 [DefaultEvent("SendMessage")] 6 [DesignTimeVisible(true)] 7 public class AxGetData : AxHost 8 { 9// 中略 10 public virtual bool IsDataReady(short index); 11// 後略
と、定義はされているようで
本当に呼び出すことだけが出来ていないようです。
またこのGetData
というコントロールはC++
のDialog
においてプロファイラ側でデータの送信準備が完了したタイミングでDataReady
イベントを発生させ、その中でデータを取得することで最新の情報を安全に取得することができるのですがこのイベントも機能していないようでそちらも大変問題ですが、IsDataReady()
の問題を解決できれば同様に解決できるのではないかと考えています。
###訊きたい事
OCX
をAxHost
頼みで変換した際、何らかの要因により実行できない関数がある場合どのようにすれば関数を呼び出せるようになるのか?が知りたいことです。
どうかこのような現象について何らかの知識のある方に修正の方向性をご教授願えればと思い質問をさせていただきます。
本来職場内で聞くような内容なのですがなにぶんプログラム担当が私一人のためどうともならない状態であるのでteratailに助けを求めるほかありませんでした。
よろしくお願いいたします。
補足情報
単語説明
- WinCamD : DataRay社製ビームプロファイラー - GetData : DataRay社のOCXコントロールのひとつで、ドライバ越しにWinCamDなどの機器の設定変更や情報取得を行う - IsDataRead() : プロファイラ側のデータが準備完了ならばブールを返す関数。 - DataReadyイベント : プロファイラ側のデータが準備完了ならば発火するイベント
リンク
補足情報(FW/ツールのバージョンなど)
- Visual Studio 2015 SP1
- Windows 7 64bit
###試したこと
- DataRay社資料Visual Basic Instructions – Interfacing DataRay to Visual Basic in Visual Studio 2010 の手順を実施し、その中の機能は正常に作動することを確認しました。
- DataRay側への問い合わせは行ってはいるのですが・・・。
回答1件
あなたの回答
tips
プレビュー