質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

2回答

1983閲覧

(wow64) 32bitのexeとDLLの共存方法がわかりません

junnnn

総合スコア17

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

2クリップ

投稿2018/01/18 16:46

編集2022/01/12 10:55

お世話になります。

C言語で書いた32bitのコードをexe化し、DLLで32bitで書いたコードの値を64bitのcファイルで読み込む方法が分かりません。
(32bitのexe化でなくても、Cファイルでも読み取る)
イメージだと、

32bitのCファイルに

//#include DLL1 //DLLの読み込み
// DLL1内の関数: tasu(int X, int Y){ return x + Y; }
{
A = 10;
B = 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言語のコードを省略しているところはありますが、イメージ的にはこんな感じです。
イメージ説明

Visual Studio 2017でC言語を使用しています。

32bitの値を呼び出す為にはどの様に設定をすればいいのか又、64bitで32bitの値をどの様なコードで呼び出せばいいのかを御教授ください。

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こんにちは。

32bitや64bitのCファイルの意味が良く分かりませんが、少なくとも32bitのexeファイルから64bitのdllを直接呼び出すことはできません。それぞれのCPUの動作モードが異なるのですが、動作モードを同じプロセス空間内で切り替える仕組みが存在しないから無理なのです。(本質的に作れない気がします。)
仮にやるなら、プロセス空間を跨いで関数呼び出しする必要がありますので、リモート・プロシージャ・コール的な仕組みの導入が必要です。かなり面倒です。

因みに「Cファイル」と表現した場合、「C言語で記述されたソース・ファイル」を意味すると思います。
exeやdllファイルは元がC言語かどうか、一般に無関係ですので。
そして、ソース・ファイルに32bitや64bitの区別は通常ありません。

投稿2018/01/18 17:02

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

junnnn

2018/01/18 17:45

そうですか、分かりました。 御回答有難う御座いました。
guest

0

ソースコードは通常、64bitと32bitの両方共用で一個です。
コンパイルする時に64bitWindows用にするか32bit用にするか選べるだけです。
64bit用のDLLは64bit用のEXEからしか使えませんからすべてのEXEをx64で作成するのが唯一の解決策かもしれません。

ちなみに32bitのCファイルというのが、32bit整数を扱かうCファイルという意味でしたら、Windowsの場合x64で作成しても64bitになるのはポインタだけで、int型の変数はx64でもx86でも32bitのままですし、long longや__int64は64bitのままです。

投稿2018/01/19 10:33

編集2018/01/19 10:35
colonq

総合スコア88

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問