COMインターフェイスでサードパーティライブラリを使用しようとしています。 A C++サンプルアプリケーションは以下のように宣言された関数使用が提供される:タイプライブラリをインポートした後インポートされたタイプライブラリ関数が元のソースと異なるのはなぜですか?
HRESULT __stdcall IMyInterface::DoSomething (BSTR id, long State)
を、得られたDelphiコードは、C++サンプル・アプリケーションの
procedure DoSomething (const id: WideString; State: Integer); safecall;
、結果( HRESULT)は、関数が正しく実行されたかどうかを判断するために使用されます。
なぜ私は結果を返すことができないようにこの宣言をプロシージャに変換しますか?
これを解決するにはどうすればよいですか?
時々私は、Delphiで生成されたtlbが間違っていることを発見しました。私は手動で生成されたtlbファイルを編集することになります。プロシージャを関数に変更し、それが機能するかどうかを確認してください。 – Hendra
これを調べる必要はありません。結果の上位ビットが設定されている場合、Delphiは例外をスローします。このため、プロシージャは 'safecall'と宣言されます。 [この質問](http://stackoverflow.com/questions/96042/whats-safecall)を参照してください。 –
2番目の考えでは、コマンドプロンプトから-Pt-オプションを指定してtlibimpを実行してみてください(-Pt- HRESULTをマップしてすべてのインタフェースを安全にする(-T))。 – Hendra