2012-01-12 16 views
2

こんにちは私はinteropを使ってC#コードをDelphiで呼び出します。 C#コードにはバイナリがあり、Delphi 5でMenu:Project - > Import Type Library Addをクリックして、tlbファイルを追加します。XXXX.tlb Unit dir name:delphi XXX_TLB.pasファイルが生成されるパスを入力します。生成されたTLBファイルをきれいに保つには?

C#のDLL、TLBおよびデルファイXXX_TLB.pasがすでにあった場合。今、私はC#コードでもう一つの関数を追加し、Delphiもこの関数を呼び出すことを願っています。私はC#を再コンパイルし、delphi XXX_TLB.pasファイルを再生成する必要があります。しかし、上記の手順を実行すると、新しく生成されたXXX_TLB.pasに新しく追加された関数が含まれているように見えますが、XXX_TLB.pasの関数の順序は以前と全く異なります。

例えば、私のC#のバイナリに私が持っている機能: 関数func1を(); func2(); func3(); func4(); //新しく追加された

古いXXX_TLB.pasでは、関数の順序は次のとおりです。 func1(); func2(); func3(); XXX_TLB.pasは次のようになります。 func1(); func3(); func4(); func2();

XXX_TLB.pasはまだ使用することができますが、ない機能の違いのように見えますが、私はTFSにチェックインするとき、私はそれが透水性のバージョンから大きく変化ご覧ください。この新しいXXX_TLB.pasを以前と同じ順番に保つ方法はありますか?私の機能も追加しますか?どうやってするか?ありがとう!

+0

私はそれが再配列されているクラスラッパーであると信じています。これは実行可能な順序を変更するため、COMインターフェイスには発生しません。 –

答えて

2

あなたは.PASファイルを自分で書き始めるない限り最小限の変更を維持したいと考えてすることはできません。それは悪い選択肢のように思える。

は、おそらく何が起こっているか、あなたが輸入前回あなたのコンパイラのいずれかのバージョンを変更したということです。さもなければ、1人は最小の相違を期待します

どのバージョンのコンパイラと.ocx/.dllが使用されたかをコメントで確認してください。

+0

古いファイルはXPシステムで生成されていますが、今はWindows 7しか持っていません。これが理由だと思いますか? – spspli

+0

私は、コンパイラのバージョンの違いが、実際にはtypelibインポータの出力の違いを説明する可能性が高いと考えていました。 OSは重要ではありません。 –

+0

古いTLB.pasファイルと新しいTLB.pasファイルの順序が大きく異なっていて、同様のケースがありました(クラスも移動されます)。私はコンパイラもOSのバージョンも変更していない。おそらくデルファイが使用するインポータの実装の詳細です。 –

2

あなたは私の知る限り、することはできません。 ほとんどの場合、私はそれらを一種の「ブラックボックス」と見なすことができますし、特定の宣言を見つけるためにそれらを覗かなければならないこともあります。

関連する問題