ステッピング モーター制御インターフェイス用の SDK の一部である .NET COM-dll を使用しようとしています。SDK にはタイプ ライブラリが用意されており、「コンポーネントのインポート > タイプ ライブラリのインポート」を使用して Delphi にインポートしました。
COM プログラミングの基本はある程度知っていますが、インターフェイスを機能させるのに苦労しています。問題は、CoClass と OLE サーバー プロキシが空のインターフェイス、つまりメソッドのないインターフェイス ( _ComMotorCommands ) のみを公開することです。そこから実際のIComMotorCommandsにキャストすると、Interface not supportedエラーが発生します。
// *********************************************************************//
// Interface: IComMotorCommands
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {0D4E3A3F-0C07-438B-9F6F-CC1968408CFC}
// *********************************************************************//
IComMotorCommands = interface(IDispatch)
['{0D4E3A3F-0C07-438B-9F6F-CC1968408CFC}']
function Get_ErrorFlag: WordBool; safecall;
function Get_ErrorMessageString: WideString; safecall;
function Get_ErrorNumber: Integer; safecall;
...
end;
...
// *********************************************************************//
// Interface: _ComMotorCommands
// Flags: (4432) Hidden Dual OleAutomation Dispatchable
// GUID: {5AB3EB9E-E847-3133-95DC-4DDC7870C02A}
// *********************************************************************//
_ComMotorCommands = interface(IDispatch)
['{5AB3EB9E-E847-3133-95DC-4DDC7870C02A}']
end;
...
CoComMotorCommands = class
class function Create: _ComMotorCommands;
class function CreateRemote(const MachineName: string): _ComMotorCommands;
end;
また、手動でインターフェイスを作成しようとしました
CreateComObject(CLASS_ComMotorCommands) as IComMotorCommandsDisp
それ自体は例外をスローしません。ポートやボーレートなどの一部の接続プロパティを設定しても機能するようです。しかし、モーターのステータスを照会しようとするとすぐに、
「BadImageFormatException: 不正な形式のプログラムを読み込もうとしました。(HRESULT からの例外: 0x8007000B)' ,
私のアプリケーションの例外としてではなく、インターフェイス自体のエラー報告メカニズム ( Get_ErrorMessageString ) を介して注意してください。
このエラーは通常、x86 コードと x64 コードの間のビット数の競合を示しています。しかし、SDK と同様に、私のプラットフォーム ターゲットは x86 です。Windows 7 x64 で Delphi XE3 を実行していますが、試した 32 ビット マシンでも同じエラーが発生しました。
SDK には、VB、C++、および C# 用の Visual Studio の例もいくつか用意されています。しかし、それらはすべて、インターフェイスを呼び出す Visual Studio の方法を使用しており、私には役に立ちません。(TLB を直接参照し、'ComMotorCommands' 型の変数を宣言するだけで、すべてのインターフェイス メソッドに自由にアクセスできます。)
リクエストに応じて完全なファイルを電子メールで提供します。
私はここで頭を悩ませているので、これに関する助けがあれば大歓迎です!