パッケージAda_PkgはプロシージャDoSomethingです(Number:in Integer)。 Export(C、DoSomething、 "doSomething");プラグマエクスポートAda_Pkgを終了します。
4
2
私はHSの間2〜3年間Pascalを使ったことがありますが、私は完全なAda初心者です。
IIRC、C / CからPascalでコンパイルされた関数を呼び出すことは可能です。 手続きを呼ぶことは可能ですか
5 Answer
6
このhttp://www.ghs.com/download/whitepapers/ada_c .pdf [古いチュートリアル]によると、それは可能なはずです。
ただし、http://archives.devshed.com/forums/programming-132/problem-passing-in-out-parameter-from-c-to-ada-1023388.html [このスレッド]に示されているように、 Ada関数のextern "C"定義に注意してください。
4
これはg / gnatmake 5.3.0を使った例です。
_注意:CとAdaの間でデータを渡すときは注意してください。
ada_pkg.ads *
パッケージAda_PkgはプロシージャDoSomethingです(Number:in Integer)。 Export(C、DoSomething、 "doSomething");プラグマエクスポートAda_Pkgを終了します。
ada_pkg.adb *
Ada.Text_Ioと共に。パッケージ本体Ada_PkgがプロシージャーDoSomething(Number:in Integer)であるAda.Text_Io.Put_Line( "Ada:RECEIVED")
main.cpp *
/ *構築するには:gnatmake -c ada_pkg g -c main.cpp gnatbind -n ada_pkg gnatlink ada_pkg -o main --LINK = g -lstdc main.o * / #含める extern "C" {void doSomething(int data);} void adainit(); void adafinal(); } int main(){adainit(); // Adaには必須doSomething(44);アダフィナル(); // Adaには必須std :: cout << "in C" << std :: endl; 0を返します。 }
参考文献:
1
そのようなことは常に行われています。 トリックは、ルーチンに "C"スタイルの呼び出しプロトコルを使用するように双方に指示することです。 Cではこれはextern "C"宣言で行われ、Ada側ではプラグマExport( "C"、…で行われます。
詳細については、それぞれのお気に入りの参考資料でそれらを調べてください。 ポインタと参照パラメータに気をつけてください!
0
絶対に可能です。 過去5年間、私はCとAdaを組み合わせたシステムに取り組んできました。
0
はい。 数年前、私はそれを証明するために短い簡単なデモを書きました。 2つのDLLがあり、1つはCで書かれ、もう1つはAdaで書かれています。 彼らはただ浮動小数点値に定数を追加しました。 CとAdaの2つのアプリケーションがそれぞれ両方のDLLを使用していました。 そのため、AdaからのC呼び出し/呼び出しの可能な組み合わせはすべて存在します。 それはすべてうまくいった。 これは、当時の最新バージョンがWindowsであればどれでもでした。思い出せませんが、これがLinuxまたはBeOSで機能している可能性があります。
今から私がそれからソースコードを見つけることができたならば…