C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[23]: Windows8(64bit)上でexeが動かない件について [1]


(過去ログ 111 を表示中)

[トピック内 51 記事 (21 - 40 表示)]  << 0 | 1 | 2 >>

■66041 / inTopicNo.21)  Re[15]: Windows8(64bit)上でexeが動かない件について
  
□投稿者/ howling (296回)-(2013/03/28(Thu) 21:50:46)
No66040 (とっちゃん さん) に返信
> あ、忙しければ反応しないだけなので気にしなくていいですよ。
> 自分のペースで参加してください。

わかりました。
いや、でも本当にこんなに毎回お付き合い頂いてますから、感謝してもしきれないです。
また勉強会でお会いしたら、今度はしっかりご挨拶したいですね。

> 原因ここか!
>
> 動きます。というか。。。世の中のx64で動いてるアプリのいくばくかは
> いろいろな理由で64bit化することが不可能なので(うちのソフトも不可能な理由があって32bitのまま)
> そういうのは普通に32ビットアプリとして動作してます。
>
> そもそもVS自身も32ビットアプリですしw

いやー…どうも話していておかしいと思っていたんです。
64bitOS=ターゲットはx64という認識でいました。そうかぁ…そうなのか…。

> ま、これについては、そういうのがあるんだーで十分です。
> カーネルモードドライバの開発に関与しない限りは関係ない世界です。

さすがに、今回それで手をつけよう、なんていうのは思ってないので大丈夫です。
触ったら逆に壊しそうなイメージですし。カーネルって。
正直触れたくない感覚でいます。触れてうんぬん、ってできる方が速いと思うんですけどね。
enchant-MOONの話とかでもちょっと出てきてますし。興味はチラッとありますが。

> 思いっきりご認識です。x86 で作ったEXEが動かないのは、x86系CPUではない環境です。
> 現行OSだと、ARM上で動作する Windows RTだけですね。

そうなんですか…!ということは、Surface上で動作しているものは全てx64で動作しているんですね!
なんか色々繋がってきてちょっと楽しいです。

> ということで、とりあえず今のプロジェクトを元に戻して、x86なまま動かしてみてください。
> x86なEXEでx86なまま、まずは動かしてみましょう。

えーと、その結果0xc000007bのエラーが出たはずですが…?
少なくともx64指定しているものは無い状態で、です。
ちなみに、今書いているこのPCもWindows7の64bitなのですが、
この上ではしっかり動いているexeが、同じくWindows7の64bit(ただし、何も入っていない。VSとかも当然さっぱり)の上では、
上に書いた0xc000007bのエラーが出てしまう、という状態です。

で、この0xc000007bについて調べてみると、32bitの何かを64bitOS上で触ろうとして死んでる…みたいなことが
最初の質問に書いてあるURLに載っていたので、「それだ」と勝手に思い込んでいる状態です。

> もし、64bitOSだと途中でクラッシュするとか、起動しようとしてエラーが発生するとかがあったら
> その時に、改めてリモートデバッグすればいいと思います。
>
> ちなみに、対象がWin7なら相手がx64でもVS2010でリモートデバッグできます。

さすがにこれはそうですか。一応VS2012でリモートデバッグをしちゃいましたが…。
#なんかVS2010の方でやったら、同じexeとリモートサーバー名でやったのにも関わらず動きませんでした。
#どうも、リモートデバッグのモニター側PCから、このPCにユーザー認証がうまくいかなかったようです。
#ログインしているユーザー名とパスワード合わせておいたのに、なんででしょうね…でも、これは別の問題。
引用返信 編集キー/
■66042 / inTopicNo.22)  Re[16]: Windows8(64bit)上でexeが動かない件について
□投稿者/ とっちゃん (84回)-(2013/03/28(Thu) 22:12:22)
とっちゃん さんの Web サイト
No66041 (howling さん) に返信
>>思いっきりご認識です。x86 で作ったEXEが動かないのは、x86系CPUではない環境です。
>>現行OSだと、ARM上で動作する Windows RTだけですね。
>
> そうなんですか…!ということは、Surface上で動作しているものは全てx64で動作しているんですね!
> なんか色々繋がってきてちょっと楽しいです。
>
ぶー。
一言もx64とは書いてません。Windows RT は、64bitかもしれませんが、x64ではありません。
そっか。早とちりが過ぎるところもあるんだ。


>>ということで、とりあえず今のプロジェクトを元に戻して、x86なまま動かしてみてください。
>>x86なEXEでx86なまま、まずは動かしてみましょう。
>
> えーと、その結果0xc000007bのエラーが出たはずですが…?
> 少なくともx64指定しているものは無い状態で、です。
> ちなみに、今書いているこのPCもWindows7の64bitなのですが、
> この上ではしっかり動いているexeが、同じくWindows7の64bit(ただし、何も入っていない。VSとかも当然さっぱり)の上では、
> 上に書いた0xc000007bのエラーが出てしまう、という状態です。
>

AnyCPUのEXEではありませんか?そのEXEは本当にx86なEXEですか?

0xC000007Bは、WinSxSの不一致エラーです(検索してるはずなのでお分かりと思いますが)。
もし、AnyCPU で動かすことが命題なので、あればC++/CLIのプロジェクトをx86ではなく、x64で作る必要があります。
でもって、ComCtl32.dll のマニフェスト指定は外してあげなければいけません。
ComCtl32.dll は x86/x64 で異なるものを指定しなければいけませんので、Any CPU では使えません。

とりあえず、このあたりは早い段階できちんと整理しておくことをお勧めします。




> で、この0xc000007bについて調べてみると、32bitの何かを64bitOS上で触ろうとして死んでる…みたいなことが
> 最初の質問に書いてあるURLに載っていたので、「それだ」と勝手に思い込んでいる状態です。
>
>>もし、64bitOSだと途中でクラッシュするとか、起動しようとしてエラーが発生するとかがあったら
>>その時に、改めてリモートデバッグすればいいと思います。
>>
>>ちなみに、対象がWin7なら相手がx64でもVS2010でリモートデバッグできます。
>
> さすがにこれはそうですか。一応VS2012でリモートデバッグをしちゃいましたが…。
> #なんかVS2010の方でやったら、同じexeとリモートサーバー名でやったのにも関わらず動きませんでした。
> #どうも、リモートデバッグのモニター側PCから、このPCにユーザー認証がうまくいかなかったようです。
> #ログインしているユーザー名とパスワード合わせておいたのに、なんででしょうね…でも、これは別の問題。
引用返信 編集キー/
■66043 / inTopicNo.23)  Re[16]: Windows8(64bit)上でexeが動かない件について
□投稿者/ 魔界の仮面弁士 (186回)-(2013/03/28(Thu) 22:58:29)
No66041 (howling さん) に返信
> いやー…どうも話していておかしいと思っていたんです。
> 64bitOS=ターゲットはx64という認識でいました。そうかぁ…そうなのか…。

x86 系の 16bit/32bit/64bit 環境について言えば――

16bit版 Windows では、16bitアプリが動きます。
32bit アプリは動きません(ただし、Win32s という限定的な 32bit 環境が存在していました)。

32bit版 Windows では、16bit アプリと 32bit アプリが動きます。64bit アプリは動きません。
16bit アプリを起動した場合、WOW (Windows on Windows)という互換環境での動作となります。

64bit版 Windows では、32bit アプリと 64bit アプリがが動きます。16bit アプリは動きません。
32bit アプリを起動した場合、WOW64(Windows 32-bit On Windows 64-bit)という互換環境での動作となります。


x64 ビルドされたものは、64bit OS でしか動かないアプリになります。
AnyCPU ビルドなら、32bit OS では 32bit動作、64bit OS では 64bit動作になります。
x86 ビルドなら、32bit OS でも 64bit OS でも 32bitで動作します。


>>思いっきりご認識です。x86 で作ったEXEが動かないのは、x86系CPUではない環境です。
>>現行OSだと、ARM上で動作する Windows RTだけですね。
> そうなんですか…!ということは、Surface上で動作しているものは全てx64で動作しているんですね!

いやいやいや。x64 ではなく ARM だと書いてありますよね。
http://ja.wikipedia.org/wiki/ARM%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3


主流とは言えないかも知れませんが、世の中には x86 や x64 以外の
プラットフォームも存在しています;いました。
http://support.microsoft.com/kb/164951/ja
http://www.wince.ne.jp/review/katsuo/cpu/default.htm


その昔、Windows NT と呼ばれている 32bit の OS がありましたが、
これには x86版、MIPS版、Alpha版 という、異なる CPU アーキテクチャー向けの
OS がそれぞれ提供されていました。開発用のコンパイラもそれぞれ異なっており、
上記 URL に示した Visual C++ のエディション群がありました。
VBも、"Visual Basic 6.0 RISC Edition for Alpha" なんてのがありましたし。

64bit OS も同様に、CPU による差異があります。たとえば、Intel Itanium 2 という
CPU 上で 動作している Windows 上では、x86 や x64 のソフトではなく、
IA64 向けにコンパイルされたソフトウェアが必要となります。
Visual Studio でビルドする場合は、"Itanium" プラットフォームを選択します。

そして Surface は、x86 でも x64 でも IA64 でもありません。
動作するアプリケーションは、ARM 用にコンパイルされたものとなります。
Visual Studio でビルドする場合は、"ARM" プラットフォームを選択します。
引用返信 編集キー/
■66044 / inTopicNo.24)  Re[17]: Windows8(64bit)上でexeが動かない件について
□投稿者/ howling (297回)-(2013/03/29(Fri) 00:37:57)
No66042 (とっちゃん さん) に返信

返信遅れてすみません。次の日になっちゃいました。寝る前ですが…。

> ぶー。
> 一言もx64とは書いてません。Windows RT は、64bitかもしれませんが、x64ではありません。
> そっか。早とちりが過ぎるところもあるんだ。

ぬぬぬ。なるほど、そもそも現状ある全てのアプリ=x86 + x64だと思っていたのが既に間違いだったんですかね…。
ここらへんよくわかってないですね。どうしたものか…。
早とちりは多いかもしれないです。普段から気をつけないと…orz

> AnyCPUのEXEではありませんか?そのEXEは本当にx86なEXEですか?

AnyCPUですね・・・。
AnyCPU = x64 またはx86のいずれかで動作するもの。これが混ざることはない。
そういう認識自体は正しいのでしょうか。

> 0xC000007Bは、WinSxSの不一致エラーです(検索してるはずなのでお分かりと思いますが)。
> もし、AnyCPU で動かすことが命題なので、あればC++/CLIのプロジェクトをx86ではなく、x64で作る必要があります。
> でもって、ComCtl32.dll のマニフェスト指定は外してあげなければいけません。
> ComCtl32.dll は x86/x64 で異なるものを指定しなければいけませんので、Any CPU では使えません。

いいえ、32bitで動けば…というか、32bitと64bitの環境、どちらでも動くということさえ確認できれば問題ありません。
最悪、WindowsXPすらも切り捨てて、Windows7 or 8の64bitを対象、とすることも可能なレベルですが。
(社内で使用する物ですので…)
引用返信 編集キー/
■66045 / inTopicNo.25)  Re[17]: Windows8(64bit)上でexeが動かない件について
□投稿者/ howling (298回)-(2013/03/29(Fri) 00:45:53)
No66043 (魔界の仮面弁士 さん) に返信
こんばんわ。ご返信ありがとうございます。いつもお世話になっております…。

> x86 系の 16bit/32bit/64bit 環境について言えば――
>
> 16bit版 Windows では、16bitアプリが動きます。
> 32bit アプリは動きません(ただし、Win32s という限定的な 32bit 環境が存在していました)。
>
> 32bit版 Windows では、16bit アプリと 32bit アプリが動きます。64bit アプリは動きません。
> 16bit アプリを起動した場合、WOW (Windows on Windows)という互換環境での動作となります。
>
> 64bit版 Windows では、32bit アプリと 64bit アプリがが動きます。16bit アプリは動きません。
> 32bit アプリを起動した場合、WOW64(Windows 32-bit On Windows 64-bit)という互換環境での動作となります。

これ、すごくわかりやすい説明でした…。非常に助かりました。
自分の今欲しい物が64bitアプリではなく、32bitと64bitで動く物、つまり、AnyCPUまたはx86をターゲットとしたものだ、
ということが明確にわかりました。ありがとうございました。

> いやいやいや。x64 ではなく ARM だと書いてありますよね。
> http://ja.wikipedia.org/wiki/ARM%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3

なんてこった…。いえ、とっちゃんさんの方でも書きましたが、今時x86 + x64 = すべてのターゲットと思いこんでいたので。
むむむ…難しいですね。

> 主流とは言えないかも知れませんが、世の中には x86 や x64 以外の
> プラットフォームも存在しています;いました。
> http://support.microsoft.com/kb/164951/ja
> http://www.wince.ne.jp/review/katsuo/cpu/default.htm
>
> その昔、Windows NT と呼ばれている 32bit の OS がありましたが、
> これには x86版、MIPS版、Alpha版 という、異なる CPU アーキテクチャー向けの
> OS がそれぞれ提供されていました。開発用のコンパイラもそれぞれ異なっており、
> 上記 URL に示した Visual C++ のエディション群がありました。
> VBも、"Visual Basic 6.0 RISC Edition for Alpha" なんてのがありましたし。
>
> 64bit OS も同様に、CPU による差異があります。たとえば、Intel Itanium 2 という
> CPU 上で 動作している Windows 上では、x86 や x64 のソフトではなく、
> IA64 向けにコンパイルされたソフトウェアが必要となります。
> Visual Studio でビルドする場合は、"Itanium" プラットフォームを選択します。
>
> そして Surface は、x86 でも x64 でも IA64 でもありません。
> 動作するアプリケーションは、ARM 用にコンパイルされたものとなります。
> Visual Studio でビルドする場合は、"ARM" プラットフォームを選択します。

うあぁ…種類いっぱいあるんですね…ちょっとしっかり整理しないとですね…。
ということは、先程AnyCPUまたはx86をターゲットにしたものが欲しい、と書きましたが、
他にも動く物ってあるのかもしれないですね。自分の浅はかな知識を元に、
これしかない!と思いこんでいたのはお恥ずかしい限りですが、
正直、今それにぶち当たれたことには感謝しております。

なんとなく、すぐ理解できるものではないなーと思っているのですが…、
少なくとも間違って覚えないようにしていきたいです。
引用返信 編集キー/
■66051 / inTopicNo.26)  Re[18]: Windows8(64bit)上でexeが動かない件について
□投稿者/ とっちゃん (85回)-(2013/03/29(Fri) 11:41:49)
とっちゃん さんの Web サイト
No66044 (howling さん) に返信
>>AnyCPUのEXEではありませんか?そのEXEは本当にx86なEXEですか?
>
> AnyCPUですね・・・。
> AnyCPU = x64 またはx86のいずれかで動作するもの。これが混ざることはない。
> そういう認識自体は正しいのでしょうか。
>
>>0xC000007Bは、WinSxSの不一致エラーです(検索してるはずなのでお分かりと思いますが)。
>>もし、AnyCPU で動かすことが命題なので、あればC++/CLIのプロジェクトをx86ではなく、x64で作る必要があります。
>>でもって、ComCtl32.dll のマニフェスト指定は外してあげなければいけません。
>>ComCtl32.dll は x86/x64 で異なるものを指定しなければいけませんので、Any CPU では使えません。
>
> いいえ、32bitで動けば…というか、32bitと64bitの環境、どちらでも動くということさえ確認できれば問題ありません。
> 最悪、WindowsXPすらも切り捨てて、Windows7 or 8の64bitを対象、とすることも可能なレベルですが。
> (社内で使用する物ですので…)

Any CPU は、64bitOSで動いてれば、64bitプロセスとして、32bitOSで動いていれば32bitプロセスとして動作します。
そこで利用されるDLLはすべて(1ビットの例外もなく)64bit または 32bit で動かなければなりません。
これは、C++/CLI を利用していようがです。

ところが、C++/CLI には、AnyCPUがありません。
ですので、32/64 それぞれのモジュールを用意して環境に合わせて適切なものを配置するか
AnyCPUのEXEではなく、C++/CLI に合わせて、x86 または x64 のEXEを作るかのいずれかの選択肢をとります。

一概にx86で作っておけばいいとは言えません。プログラムによっては、苦労してでもx64で動くようにしたほうがいい場合もありますし
そもそも x64 で作らないとほかのモジュールの都合で動かない場合もあります。
どんなプログラムかわからない以上答えることができません。



64bitアプリとして動作することが命題ではないのであれば、まずは EXE を Any CPU ではなく、x86 にしてみることをお勧めします。
それで起動までたどり着けば、32ビットアプリとしては動作させられるということになりますので社内的にそれでいいかを確認すればよいと思います。

引用返信 編集キー/
■66053 / inTopicNo.27)  Re[19]: Windows8(64bit)上でexeが動かない件について
□投稿者/ howling (299回)-(2013/03/29(Fri) 11:52:18)
No66051 (とっちゃん さん) に返信
おはようございます。
ご返信ありがとうございます。

> Any CPU は、64bitOSで動いてれば、64bitプロセスとして、32bitOSで動いていれば32bitプロセスとして動作します。
> そこで利用されるDLLはすべて(1ビットの例外もなく)64bit または 32bit で動かなければなりません。
> これは、C++/CLI を利用していようがです。

仮面の魔界弁士さんのご回答を拝見して、こちらはだいぶ理解できました。
(完全ではないと思いますので、ひと段落ついてからしっかり調べますが…)

> ところが、C++/CLI には、AnyCPUがありません。
> ですので、32/64 それぞれのモジュールを用意して環境に合わせて適切なものを配置するか
> AnyCPUのEXEではなく、C++/CLI に合わせて、x86 または x64 のEXEを作るかのいずれかの選択肢をとります。

なるほど…これで2択になってしまうのですね。

> 一概にx86で作っておけばいいとは言えません。プログラムによっては、苦労してでもx64で動くようにしたほうがいい場合もありますし
> そもそも x64 で作らないとほかのモジュールの都合で動かない場合もあります。
> どんなプログラムかわからない以上答えることができません。

上司に確認してみたのですが、64bitで云々よりも、32bitじゃないと逆に動かない部分はあるかもしれない、ということでしたので、
むしろx86であることが必須なのかもしれません。

> 64bitアプリとして動作することが命題ではないのであれば、まずは EXE を Any CPU ではなく、x86 にしてみることをお勧めします。
> それで起動までたどり着けば、32ビットアプリとしては動作させられるということになりますので社内的にそれでいいかを確認すればよいと思います。

そうですね。むしろx64で作った結果、うまいこと動いたとしても、32bitOS上で動かないアプリを作ってしまうところでした。
認識違いを正してくださってありがとうございました。

とりあえず、今x86に全部設定しているところなのですが、
x86にすること自体は、

・C#のプロジェクトの場合(「クラスライブラリ」を指定して作成されたプロジェクト。1つあります。)
 [プロジェクトのプロパティ]->[ビルド]->[プラットフォームターゲット]
 を、「Any CPU」から「x86」へ変更

・C++/CLIのプロジェクトの場合(ライブラリ出力するプロジェクト。2つあります。)
 [プロジェクトのプロパティ]->[構成プロパティ]->[ライブラリアン]->[全般]->[対象コンピュータ]
 を、未記入の状態から「MachineX86」へ変更

・C++/CLIのプロジェクトの場合(アプリケーションを出力するプロジェクト。1つあります。)
 [プロジェクトのプロパティ]->[構成プロパティ]->[リンカ]->[詳細設定]->[対象コンピュータ]
 を、未記入の状態から「MachineX86」へ変更

だけで良いのでしょうか?
引用返信 編集キー/
■66055 / inTopicNo.28)  Re[20]: Windows8(64bit)上でexeが動かない件について
□投稿者/ howling (301回)-(2013/03/29(Fri) 12:29:00)

> ・C#のプロジェクトの場合(「クラスライブラリ」を指定して作成されたプロジェクト。1つあります。)
>  [プロジェクトのプロパティ]->[ビルド]->[プラットフォームターゲット]
>  を、「Any CPU」から「x86」へ変更
>
> ・C++/CLIのプロジェクトの場合(ライブラリ出力するプロジェクト。2つあります。)
>  [プロジェクトのプロパティ]->[構成プロパティ]->[ライブラリアン]->[全般]->[対象コンピュータ]
>  を、未記入の状態から「MachineX86」へ変更
>
> ・C++/CLIのプロジェクトの場合(アプリケーションを出力するプロジェクト。1つあります。)
>  [プロジェクトのプロパティ]->[構成プロパティ]->[リンカ]->[詳細設定]->[対象コンピュータ]
>  を、未記入の状態から「MachineX86」へ変更

とりあえず、これをやってみました…。
Squrrelというスクリプト言語を使っているのですが、
そこで結構エラーが出ました…INTと変換できないですよ的な…。
バイト数が変更されたのでしょうね…。引き続き修正しますが、取り急ぎ報告致します。
引用返信 編集キー/
■66056 / inTopicNo.29)  Re[20]: Windows8(64bit)上でexeが動かない件について
□投稿者/ とっちゃん (86回)-(2013/03/29(Fri) 13:18:37)
とっちゃん さんの Web サイト
No66053 (howling さん) に返信
> ・C#のプロジェクトの場合(「クラスライブラリ」を指定して作成されたプロジェクト。1つあります。)
>  [プロジェクトのプロパティ]->[ビルド]->[プラットフォームターゲット]
>  を、「Any CPU」から「x86」へ変更
>
DLLの場合は、今までのままで問題ありません。DLLは、呼び出し元のプロセスのメモリ空間に合わせて
適切なほうを自動選択します。
EXEの場合は、いまの Any CPU の構成とは別に、x86 の構成を作って、それを選択すればOKです。


> ・C++/CLIのプロジェクトの場合(ライブラリ出力するプロジェクト。2つあります。)
>  [プロジェクトのプロパティ]->[構成プロパティ]->[ライブラリアン]->[全般]->[対象コンピュータ]
>  を、未記入の状態から「MachineX86」へ変更
>
> ・C++/CLIのプロジェクトの場合(アプリケーションを出力するプロジェクト。1つあります。)
>  [プロジェクトのプロパティ]->[構成プロパティ]->[リンカ]->[詳細設定]->[対象コンピュータ]
>  を、未記入の状態から「MachineX86」へ変更
>
なぜ、いままで Win32 で未記入だったところに設定を追加したほうがいいと思ったのでしょうか?
この理由を説明してもらえないとこちらは答えられません。



引用返信 編集キー/
■66057 / inTopicNo.30)  Re[21]: Windows8(64bit)上でexeが動かない件について
□投稿者/ howling (302回)-(2013/03/29(Fri) 14:06:50)
No66056 (とっちゃん さん) に返信
> DLLの場合は、今までのままで問題ありません。DLLは、呼び出し元のプロセスのメモリ空間に合わせて
> 適切なほうを自動選択します。
> EXEの場合は、いまの Any CPU の構成とは別に、x86 の構成を作って、それを選択すればOKです。

ふむふむ…それでは、exeを作る方はx86指定します。

> なぜ、いままで Win32 で未記入だったところに設定を追加したほうがいいと思ったのでしょうか?
> この理由を説明してもらえないとこちらは答えられません。

えーと、多分これも勘違いなのですが…
C#ですと、AnyCPU or x86 or x64指定となりますよね?
ということは、未記入だった=AnyCPUかな?と思いこんでいたのですが、これはどう指定するべきでしょうか?
引用返信 編集キー/
■66063 / inTopicNo.31)  Re[7]: Windows8(64bit)上でexeが動かない件について
□投稿者/ BBQ (1回)-(2013/03/29(Fri) 15:22:45)
> ということは、未記入だった=AnyCPUかな?と思いこんでいたのですが、これはどう指定するべきでしょうか?

ならばそのまま未記入でいいのでは?
以下のとっちゃんさんのコメントを読み落としていませんか?

> ところが、C++/CLI には、AnyCPUがありません。

引用返信 編集キー/
■66064 / inTopicNo.32)  Re[22]: Windows8(64bit)上でexeが動かない件について
□投稿者/ とっちゃん (87回)-(2013/03/29(Fri) 15:29:00)
とっちゃん さんの Web サイト
No66057 (howling さん) に返信
>>なぜ、いままで Win32 で未記入だったところに設定を追加したほうがいいと思ったのでしょうか?
>>この理由を説明してもらえないとこちらは答えられません。
>
> えーと、多分これも勘違いなのですが…
> C#ですと、AnyCPU or x86 or x64指定となりますよね?
> ということは、未記入だった=AnyCPUかな?と思いこんでいたのですが、これはどう指定するべきでしょうか?

リファレンスは参照しましたか?よくわからない場合は、まず最初にリファレンスに当たりましょう。

それでもわからないなら、その時に初めて何がわからないのかを質問しましょう。
リファレンスを読んでみた結果、こうすればいいと思うがどうだろうか?という意見を聞くことは何の問題もありません。
ですが、よくわからないけどこうしてみた。。。では、ただの教えて君です。

教えて君がダメとは言いません。
ですが、教えて君には余計な情報を与えないほうがいいので(勝手に混乱してとばっちり食らうことになるため)
そういう答え方になります。

コンパイルオプション、リンカーオプションは C++/CLI や C/C++ では、ソースコードを書くのと同等の
注意を払わなければならない重要な項目です。あやふやなままにしておくと、不具合の原因になります。

引用返信 編集キー/
■66065 / inTopicNo.33)  Re[8]: Windows8(64bit)上でexeが動かない件について
□投稿者/ howling (305回)-(2013/03/29(Fri) 15:32:02)
No66063 (BBQ さん) に返信
ご返信ありがとうございます。

> ならばそのまま未記入でいいのでは?
> 以下のとっちゃんさんのコメントを読み落としていませんか?
>
>>ところが、C++/CLI には、AnyCPUがありません。
>

あー、説明が悪かったですね。
C++/CLIの、DLLを出力するプロジェクトが未記入の場合、どうすれば良いのかわかっていません。
引用返信 編集キー/
■66066 / inTopicNo.34)  Re[23]: Windows8(64bit)上でexeが動かない件について
□投稿者/ howling (306回)-(2013/03/29(Fri) 15:35:03)
No66064 (とっちゃん さん) に返信
ご返信頂きありがとうございます。


> リファレンスは参照しましたか?よくわからない場合は、まず最初にリファレンスに当たりましょう。
>
> それでもわからないなら、その時に初めて何がわからないのかを質問しましょう。
> リファレンスを読んでみた結果、こうすればいいと思うがどうだろうか?という意見を聞くことは何の問題もありません。
> ですが、よくわからないけどこうしてみた。。。では、ただの教えて君です。
>
> 教えて君がダメとは言いません。
> ですが、教えて君には余計な情報を与えないほうがいいので(勝手に混乱してとばっちり食らうことになるため)
> そういう答え方になります。
>
> コンパイルオプション、リンカーオプションは C++/CLI や C/C++ では、ソースコードを書くのと同等の
> 注意を払わなければならない重要な項目です。あやふやなままにしておくと、不具合の原因になります。

確かに…現状だと教えて君ですね。
せっかく調べられる環境にいますので、どのプロジェクトではどう設定するべきものなのか、がわかるように調べてみます。
少しお時間ください。
引用返信 編集キー/
■66067 / inTopicNo.35)  Re[24]: Windows8(64bit)上でexeが動かない件について
□投稿者/ howling (307回)-(2013/03/29(Fri) 16:45:03)
困ったな…調べ方が悪いのか、どう攻略すれば良いのかがいまいちわからず…。

名前出しちゃってちょっと悪い気はするのですが、
επιστημηさんのサイトで書かれていることが近いのかな?と思っています。

http://blogs.wankuma.com/episteme/archive/2008/04/04/131546.aspx

ここで疑問になるのは、DLLとexeとのリンクについて。

例えば、それぞれC++のプロジェクトからDLLがx86をターゲットとした物と、AnyCPUをターゲットとした物で2種類作られ、
それをC#のexeからリンクする場合。

C#のexe側で、何も指定していないならAnyCPUとなる。
これは、64bitOS上では64bitのアプリとして動いてしまい、
AnyCPUをターゲットとしたDLLも同様に64bitで動作する。
そして、x86をターゲットとしているDLLにリンクした時には、
64bitと32bitで違っているために、今回と似たようなエラーが発生する…?

というのが私の仮定です。うーん。

今回だと、

C++/CLIのプロジェクトで、DLLを出力するものが1つ、exeを出力するものが1つ。
C++のプロジェクトで、DLLを出力するものが1つ。
C#のプロジェクトで、DLLを出力するものが1つ。

さて、C++/CLIでAnyCPUが取れないとするなら、「記入なし」の状態は多分おかしい。
今回だと、全てx86で動作するように仕向けてあげればいいわけだから、
C++/CLIのプロジェクト2つは、ともにx86がターゲットとなる。

次に、C++のプロジェクト。
これは未記入の状態で良いかどうかはわからないが、x86またはAnyCPUに設定する。
逆にx64をターゲットとしたexeからリンクすることも考えられるので、AnyCPUにするのが妥当。

最後にC#のプロジェクト。
AnyCPUとすると、επιστημηさんのサイトを見る感じ、
64bitOS上では64bitとして動作してしまうため、これをx86に設定する必要がある。

でも、DLL側のAnyCPUはexeからリンクされた時にその動作をexeに合うように変えるのだろうか…。
もしこの仮説が正しいなら、とっちゃんさんがDLLはそのままで、exeのみx86というのはわかる。
というか、全てのDLLは無条件でAnyCPUとしていいような。全てがそうじゃないからどこかで歪みが出ている???

でも、その仮説が正しい場合、動作するOSがどのOSだったとしても、動作に影響は与えられないのでは?
「AnyCPU」は動作させるOSによって動作を変える物だと思っていたのですが、謎だ…。うぅむ。

もうちょっとそれらしき場所とかあればいいんですが…。今のところ、魔界の仮面弁士さんの書いていることが一番わかりやすいです。正直。
引用返信 編集キー/
■66068 / inTopicNo.36)  Re[9]: Windows8(64bit)上でexeが動かない件について
□投稿者/ BBQ (2回)-(2013/03/29(Fri) 16:53:01)
> さて、C++/CLIでAnyCPUが取れないとするなら、「記入なし」の状態は多分おかしい。
> 今回だと、全てx86で動作するように仕向けてあげればいいわけだから、
> C++/CLIのプロジェクト2つは、ともにx86がターゲットとなる。
>
> 次に、C++のプロジェクト。
> これは未記入の状態で良いかどうかはわからないが、x86またはAnyCPUに設定する。
> 逆にx64をターゲットとしたexeからリンクすることも考えられるので、AnyCPUにするのが妥当。

C++には、AnyCPUという概念はなく、32bitか64bitという概念しかない、ということを言いたいのですが、
それは理解できていますか?
引用返信 編集キー/
■66069 / inTopicNo.37)  Re[10]: Windows8(64bit)上でexeが動かない件について
□投稿者/ howling (308回)-(2013/03/29(Fri) 17:10:21)
No66068 (BBQ さん) に返信
> C++には、AnyCPUという概念はなく、32bitか64bitという概念しかない、ということを言いたいのですが、
> それは理解できていますか?

むむ、C++/CLIだけがAnyCPUが無い(C++の場合は、未記入=AnyCPUだと思っていた)と思っていたのですが、
まずそこから間違っているようですね…。

そもそも未記入が何を表すのかが、理解できていないようです。
ここらへん、どこに載ってるのでしょうか…。
引用返信 編集キー/
■66070 / inTopicNo.38)  Re[11]: Windows8(64bit)上でexeが動かない件について
□投稿者/ とっちゃん (88回)-(2013/03/29(Fri) 17:47:52)
とっちゃん さんの Web サイト
No66069 (howling さん) に返信
> ■No66068 (BBQ さん) に返信
>>C++には、AnyCPUという概念はなく、32bitか64bitという概念しかない、ということを言いたいのですが、
>>それは理解できていますか?
>
> むむ、C++/CLIだけがAnyCPUが無い(C++の場合は、未記入=AnyCPUだと思っていた)と思っていたのですが、
> まずそこから間違っているようですね…。
>
> そもそも未記入が何を表すのかが、理解できていないようです。
> ここらへん、どこに載ってるのでしょうか…。

http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=JA-JP&k=k(VC.PROJECT.VCLINKERTOOL.TARGETMACHINE)&rd=true

リファレンスです。

VS(2010でも2012でも2008でも2005でもいい)で、プロジェクトのプロパティを開き、ヘルプを見たい該当箇所を選択状態にします。
その状態でF1キーを押すと出てきます。
#ヘルプの設定によってはローカルなヘルプを表示しますが、それだと普通のファイルパスなのでw

この部分は、本質部分ではありますが、問題を解決に導ける箇所ではありません。
書き方から理解してないなー。ヘルプくらい読んでほしいなぁ。。。ということで、リファレンスを見ましょうと書いています。

引用返信 編集キー/
■66071 / inTopicNo.39)  Re[12]: Windows8(64bit)上でexeが動かない件について
□投稿者/ howling (309回)-(2013/03/29(Fri) 17:58:45)
No66070 (とっちゃん さん) に返信

> この部分は、本質部分ではありますが、問題を解決に導ける箇所ではありません。
> 書き方から理解してないなー。ヘルプくらい読んでほしいなぁ。。。ということで、リファレンスを見ましょうと書いています。

ありがとうございます。早速読んでみます。
ちなみに、試しに…と思って全部x86指定にしてみたのですが、ダメでした。
全部x86なら少なくとも動くだけ動くはず…と思った予想も外れたので、どうしたものかなぁと。
とりあえず後は読んでからまた書きこみます。

引用返信 編集キー/
■66076 / inTopicNo.40)  Re[13]: Windows8(64bit)上でexeが動かない件について
 
□投稿者/ とっちゃん (89回)-(2013/03/29(Fri) 18:18:12)
とっちゃん さんの Web サイト
No66071 (howling さん) に返信
> ■No66070 (とっちゃん さん) に返信
>
>>この部分は、本質部分ではありますが、問題を解決に導ける箇所ではありません。
>>書き方から理解してないなー。ヘルプくらい読んでほしいなぁ。。。ということで、リファレンスを見ましょうと書いています。
>
> ありがとうございます。早速読んでみます。
> ちなみに、試しに…と思って全部x86指定にしてみたのですが、ダメでした。
> 全部x86なら少なくとも動くだけ動くはず…と思った予想も外れたので、どうしたものかなぁと。
> とりあえず後は読んでからまた書きこみます。
>
えっと、いろいろ整理する必要があるなとまとめてみたんですが...すごく重要ですっかり忘れてました。

動かそうとした64bitOSに、VC2010のランタイムライブラリはインストールしていますか?
インストールしてる場合
何をインストールしましたか?
それは、どこで入手したものですか?

インストールしてない場合と、x64版をインストールした場合は
32bit版のものをインストールして
今回いろいろいじる前のプロジェクトを実行してみてください。

リファレンスを読んでからでいいので。


引用返信 編集キー/

<前の20件 | 次の20件>
トピック内ページ移動 / << 0 | 1 | 2 >>

管理者用

- Child Tree -