C ++で作業している場合、実際には常に異なる言語で記述されたプログラムを使用している可能性があります。のような標準ライブラリの関数の多くは、operator new
速度を上げるためにAssmebly言語で実装されています。
@driisは、異なる言語で記述されたコンポーネントが相互作用する可能性のある2つの主要な方法にすでに取り組んでいます。少なくとももう1つあります。
1つのアプリケーションは、異なる言語で記述された複数のコンポーネントで構成できます。たとえば、私が取り組んでいるプログラムの1つには、C ++で記述された部分と、アセンブリで記述された他の部分があります。私は、FORTRAN + Cで書かれたプログラム、さらにはVBやC ++で書かれたプログラムに取り組んできました(Ick、面白くありません)。
考え方は単純です。あなたがする必要があるのは、一方の側がもう一方の側の関数がメモリ内のどこにあるかを知っていること、そして両方の側が呼び出しに同じ呼び出し規約を使用していることを確認することです。
呼び出し規約は、どの順序パラメーターと戻りアドレスがスタックにプッシュされるか、およびそのような他のものに関する合意です。
関数のアドレスを取得することは、ケーキから悪夢までどこでも可能です。たとえば、Windows C ++ DLLでは、それは簡単です。.libにリンクするだけで、問題ありません。VBにCまたはC++関数を呼び出させるのは、VBがこれらの.libファイルの使用方法を知らないため、少し注意が必要です。少なくとも、当時はそうではありませんでした。ここに投稿されているようなトリッキーなことをしなければなりませんでした。DLLを直接ロードしてから、関数のアドレスへのポインタを割り当てる必要があります。