質問: 10; tasu(A, B); //DLLの関数に値を渡す } 64bitのDLL1に __stdicall int tasu(int A, int B) { return A + B; } 64bitのCファイルで32bitの値を呼び込む { //DLLの呼び出し //printf()で32bitのCファイルで宣言した値を出力する。 } C言語のコードを省略しているところはありますが、イメージ的にはこんな感じです。 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/4d1bac4d0b92694d3e6e3eb7892edd9e.png) Visual Studio 2017でC言語を使用しています。 32bitの値を呼び出す為にはどの様に設定をすればいいのか又、64bitで32bitの値をどの様なコードで呼び出せばいいのかを御教授ください。 宜しくお願い致します。
回答: こんにちは。 32bitや64bitのCファイルの意味が良く分かりませんが、少なくとも32bitのexeファイルから64bitのdllを直接呼び出すことはできません。それぞれのCPUの動作モードが異なるのですが、動作モードを同じプロセス空間内で切り替える仕組みが存在しないから無理なのです。(本質的に作れない気がします。) 仮にやるなら、プロセス空間を跨いで関数呼び出しする必要がありますので、リモート・プロシージャ・コール的な仕組みの導入が必要です。かなり面倒です。 因みに「Cファイル」と表現した場合、「C言語で記述されたソース・ファイル」を意味すると思います。 exeやdllファイルは元がC言語かどうか、一般に無関係ですので。 そして、ソース・ファイルに32bitや64bitの区別は通常ありません。