★初心者にVisual C++ ..
197:デフォルトの名無しさん
08/11/23 22:28:58
C++/CLIのinterfaceではないだろうか
198:デフォルトの名無しさん
08/11/23 22:39:06
>>197
調べてみたらそのようですね
ありがと
199:デフォルトの名無しさん
08/11/24 16:16:26
すみません、ゲームをリリース版でコンパイルして実行ファイルを作ってみたんですが
MSVCR80.DLLというランタイムに依存してしまうようなんですが
このDLLは再配布可能でしょうか?
200:デフォルトの名無しさん
08/11/24 19:20:22
っ「URLリンク(www.microsoft.com)」
201:デフォルトの名無しさん
08/11/26 07:43:24
プログラミング超初心者で>>23と全く同じ状況になってしまいました
デザイン画面は 「このファイルのデザイナに、デザインできるクラスがないため、デザイナを表示できませんでした。」というエラーが出てしまいます
↓ちなみにこのコードを追加したらなってしまいました
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
//オプションボタン (ラジオボタン) の状態を確認
if (this->radioButtonKisu->Checked == true){
System::Diagnostics::Debug::WriteLine("奇数が選択されました");
}else if(this->radioButtonGusu->Checked == true){
System::Diagnostics::Debug::WriteLine("偶数が選択されました");
}else{
MessageBox::Show("奇数か偶数かを選んでください","お願い");
return;
}
}
前に成功したビルドの状態に戻せないんでしょうか
最初からやり直せば次に進めるんでしょうか
202:201
08/11/26 11:04:56
あぁ、自己解決しました…
203:デフォルトの名無しさん
08/11/26 20:30:45
ゲームを配布しようと思ってるんですが
コード生成のMTとMTdって何が違うんですか?
Dllが付くものは駄目だということは知っているんですが…
204:デフォルトの名無しさん
08/11/26 22:16:31
ライブラリが最適化されてるか否か
205:デフォルトの名無しさん
08/11/26 23:16:52
もう少しわかりやすく説明して欲しいんですが…
206:デフォルトの名無しさん
08/11/26 23:26:24
デバッグ用じゃないかデバッグ用か
207:デフォルトの名無しさん
08/11/27 00:00:34
ggrks
208:デフォルトの名無しさん
08/11/27 00:45:38
じゃあ要するに配布の再はMTを使った方がいいってことですかね?
209:デフォルトの名無しさん
08/11/27 00:52:04
そういうことにしておけばいいんじゃないですかね
210:デフォルトの名無しさん
08/11/27 00:59:05
くたばれクソども
211:デフォルトの名無しさん
08/11/27 09:56:20
MTdはデバッグ用でこれでビルドしたやつ配布すると馬鹿にされる。
212:デフォルトの名無しさん
08/11/27 11:39:13
>>208
Releaseモードでビルドするんだよ
213:デフォルトの名無しさん
08/11/27 16:52:45
myfunc.h という名前のヘッダファイルに
int max(int x,int y);
という関数プロトタイプを宣言し
main()があるソースファイルとは別のmyfunc.cppという名前のソースファイルに
int max(int x,int y)
の定義文を記述しました。
そしてmain()があるソースファイルのはじめに
#include "myfunc.h"
と記述して動いたのですが、はじめの#include文を消去しても、ヘッダファイルに適当な関数プロトタイプの宣言を追加しても
動きました。(定義はしていません)はじめに#includeを記述する必要はあるのでしょうか。
そもそもヘッダファイルの必要性がよくわかっていないので、教えていただけないでしょうか。
214:デフォルトの名無しさん
08/11/27 17:21:44
よくわからんが、とりあえず何か消したら念のためビルドのクリーンとかで
クリアしてから試してみては。
215:デフォルトの名無しさん
08/11/27 18:07:33
普通はヘッダの方は必要に応じて外部参照関数呼び出しを記述
extern int max(int x,int y);
で、cまたはcppソースの方にプロトタイプ宣言を入れる
cpp内で関数を参照する時、呼び出し側の関数よりも上に本体のコードがあれば
プロトタイプ宣言は必要ない。
本体が下にある場合はプロトタイプ宣言が必要。
216:デフォルトの名無しさん
08/11/28 00:11:19
>>214,215
ありがとうございました。いろいろ試してみます。
217:デフォルトの名無しさん
08/11/28 12:14:13
すいません、はじめてフォームアプリケーションを作ってみようと思ったんですが、
テキストボックスに入力した値がどこに入るのかわかりません。
Messagebox::Showでそれっぽいものを表示してみようとも思ったんですが、
System:::string この型は演算子として使用できません(String[0]とかも)となります。
private: System::Void textBox1_TextChanged(System::Object^ sender, System::EventArgs^ e) {}の中で自分で何かをやるんでようか?
助けてorz
218:217
08/11/28 12:16:01
MessageBox::Showを書いたのはbuton1_Clickの中です。
219:デフォルトの名無しさん
08/11/28 12:21:32
なんつーか、それ以前にやることやったほうがいい気がするが。
もしくは本でも読むか。
試しに、buton1_Clickの中に MessageBox::Show(textBox1->Text); とか書いてみ
220:デフォルトの名無しさん
08/11/28 12:28:35
>>219
ありがとうございました
おかげでスーパーハカーになることができました!
221:デフォルトの名無しさん
08/11/28 13:34:02
>>216
とりあえずmax()の本体を別のcppファイルに移してためしてみるといい
ヘッダーの使い方がわかるはずだ
222:デフォルトの名無しさん
08/11/28 21:13:21
>>221
ありがとうございます。max(int x,int y)が定義されているcppファイルを削除しても動いてしまったので
ためしに maxi(int x,int y)に名前を変えたところ、無事(? 動かなくなりました。
using namespace std; を main() があるcppファイルのはじめに記述していたのですが
stdの名前空間の中にmaxがあったのが原因だったみたいです。
その後、ヘッダーファイルをincludeしなかったりしてみたりと色々試してなんとなくですがヘッダの意味がわかった気がします。
223:デフォルトの名無しさん
08/11/28 21:56:04
日本語でおk
224:デフォルトの名無しさん
08/11/29 15:59:58
VC++2008無料版を使っています。
class の宣言文でpublic:を記述するとclassの位置までインデントが戻ってしまうのですが、
classの位置より1段階インデントした状態にオートインデントするにはどうすればいいのですか?
225:デフォルトの名無しさん
08/11/30 10:19:41
USBにエディタを入れて持ち歩きたいんですけど
Visual C++ライクなエディタってありませんか?
Notepad++Portableは知ってるんですけど、折り畳みがダサいので・・・
226:デフォルトの名無しさん
08/12/03 01:24:56
実行すると、Debugフォルダがかってに作成されちゃうんですが、仕様ですか?
227:デフォルトの名無しさん
08/12/03 05:33:26
>>226
仕様です。
どうしても作りたくなければReleaseビルド以外使うな
228:デフォルトの名無しさん
08/12/03 08:33:13
>>226
プロパティいじれば好きに出来るよ
$(OutDir)
とか
$(IntDir)
を好きな名前にしたらいい
229:デフォルトの名無しさん
08/12/03 18:13:00
ゲーム製作をしていてVC++2008 でコンパイルしています。
コード生成設定をMTdでやると通るのですが、MTでやると以下のエラーが出てしまいます。
LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __malloc_dbg が関数 "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。
libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __free_dbg が関数 "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。
C:\Documents and Settings\***\デスクトップ\**\Debug\***.exe : fatal error LNK1120: 外部参照 2 が未解決です。
LIBCMTを無視しても逆にエラーが増えてしまうんですが、どうすればいいでしょうか?
ゲーム配布時にはMTdでもMTでもdllが付かなければ問題ないですか?
230:デフォルトの名無しさん
08/12/03 18:41:50
>>229
libcpmtdはデバッグ用。内部でデバッグ用のmallocとfreeを呼んでるから/MTdじゃないとリンクできない。
リリースビルドならlibcpmtを使う。
ってか、プロジェクトの作成をウィザード任せにすればその辺を自分でいじることなんてないと思うんだけど。
231:デフォルトの名無しさん
08/12/03 18:50:34
なるほど、debugモードでコード生成する時はMTdで
リリースモードでやるときはMTでやるものなんですね
試しにリリースモードでMT生成してみたら通りました。
どうもありがとうございましたー。
232:デフォルトの名無しさん
08/12/03 20:24:26
すいません
windowsXP SP2で visual c++ 2005 Express Editionを使っているんですが
以前のエラーのため、Windows Forms Designer Package ({7494682B-37A0-11D2-A273-00C04F8EF4FF})
以前のエラーのため、Visual Studio Explorers and Designers Package ({8D8529D3-625D-4496-8354-3DAD630ECC1B})
以前のエラーのため、Visual Studio Explorers and Designers Package ({8D8529D3-625D-4496-8354-3DAD630ECC1B})
以前のエラーのため、Visual Studio Common IDE Package ({6E87CFAD-6C05-4ADF-9CD7-3B7943875B7C})
というようなエラーが出てしまいます
コマンド プロンプトで 'VCExpress /resetskippkgs' を入力しろと出るので試しましたが無理でした
調べたところbeta版がどうこうとあるのですが、自分はそのようなものは入れていません
beta版のアンインストーラーを使用しても、該当するものはありませんでした
何か解決策はないでしょうか?
233:デフォルトの名無しさん
08/12/04 10:44:16
そのエラーは何をする時に出るの?
234:デフォルトの名無しさん
08/12/06 01:18:55
お願いします。
WinXP SP2でVisual c++ 2005 Express Editionです。
UNICODEのIniファイルの情報をGetPrivateProfileStringで取得しようと
しているのですが、lpReturnedStringにはlpDefaultの値が入ってしまいます。
IniファイルがANSIのときはうまくいきます。
GetPrivateProfileStringの引数はワイド文字にしているつもりです。
意図的にGetPrivateProfileStringWにしてもダメでした。
UNICODEファイルの際の注意点などあるのでしょうか?
ご教授ねがいます。
235:デフォルトの名無しさん
08/12/06 01:29:29
>>234
INI系の関数はAでもWでもファイルの中身はマルチバイト文字として扱われる。
そのおかげで、Aで書き込んでWで読み取るなんてことができるんだけどね。
もちろん、文字コードの自動判別なんてやっていない。
236:デフォルトの名無しさん
08/12/06 10:27:18
>>234
> UNICODEのIniファイル
拡張子がINIってだけで中身がUnicodeじゃあ、INIファイルとは呼べ
ないシロモノだな。
自分で、CStdioFileクラスのCStdioFile::ReadString()/WriteString()
なりを使って、1行ずつ読み込んで文字列処理するコードを書くしか
ないな。(w
237:デフォルトの名無しさん
08/12/06 12:35:20
そうだったのか。
たしかにINIファイルって、ASCIIしか使わないけど……
238:デフォルトの名無しさん
08/12/06 13:08:53
> INIファイルって、ASCIIしか使わないけど……
んなこたぁない。シフトJISであれば漢字やカナ文字だって使える。
でなきゃ、漢字やカナ文字を含むパス名やファイル名の文字列保存に
使えない。
239:デフォルトの名無しさん
08/12/06 13:49:53
マジ?シフトJISなら良かったのか。
それは気がつかなかった。今度試してみよう。
ていうか、レジストリ弄りたくなくて、いまだにINIファイル使ってるんだよね。
240:デフォルトの名無しさん
08/12/06 14:34:14
Windowsフォルダに際限なくINIファイル作られるより、レジストリの方が
ずっとマシだと思えるんだが? ログインユーザー単位で設定が分けら
れるというメリットもあるし。
第一、レジストリなんて意識せずともWindowsのシステムでいじられ
まくりだぞ。
241:デフォルトの名無しさん
08/12/06 14:37:53
>>239
Shift_JISというか、そこで使っているコードページの文字コード。
欧米ならWindows-1252だし、繁体中国語圏ならBig5という具合。
>>240
ファイルでもApplication Dataあたりに置けば、ユーザ別設定はできる。
242:デフォルトの名無しさん
08/12/06 15:03:55
>>241
> ファイルでもApplication Dataあたりに置けば、ユーザ別設定はできる。
MFCフレームワークのデフォルト処理を前提に書いてしまった。言われ
れば、まぁ確かにそうだ。 ところで、複数インスタンス起動した
アプリからiniファイルへの同時アクセスとかって、今は問題ないん
だっけか?
243:デフォルトの名無しさん
08/12/06 16:50:51
たんなるアプリの設定データはWindowsフォルダなんかにつくらんだろ。
自フォルダにINIファイル作るなんて普通じゃないか?フリーソフトなんかは特に。
わざわざ選択肢減らす必要なんてないしケースバイケースでよかろう。
244:デフォルトの名無しさん
08/12/06 17:30:28
>自フォルダにINIファイル
Program Filesに置いたらVistaで問題が出る。
All UsersのAppDataとかでどうか。
245:デフォルトの名無しさん
08/12/06 17:41:50
>>244
>Program Filesに置いたらVistaで問題が出る。
はじめやりずれーって思ったら他のユーザーでログインしたときを考えたら納得した
246:デフォルトの名無しさん
08/12/06 19:27:48
>>243
> たんなるアプリの設定データはWindowsフォルダなんかにつくらんだろ。
昔は作りまくりだったんで、レジストリが搭乗したんだが?
今もMFCでCWinApp::SetRegistryKey()呼ばないとiniファイルを使うけど、
iniファイルが作られるデフォルトの場所はWindowsフォルダだよ。
>>244
> All UsersのAppDataとかでどうか。
自分(現在のログインユーザー)用の「マイドキュメント」フォルダの
パスはSHGetSpecialFolderLocation()で取得できるけど、これって取れる
んだっけ? もしかして決め打ち? それはそれで問題な気もするが?
なんて思ったら、
SHGetSpecialFolderLocation(hwndOwner,CSIDL_COMMON_APPDATA,...);
でいけるのか。 知らない間にCSIDLずいぶん増えているな。
URLリンク(msdn.microsoft.com)(VS.85).aspx
247:デフォルトの名無しさん
08/12/06 19:30:24
昔話がしたいだけか。
248:デフォルトの名無しさん
08/12/06 19:46:34
VistaでProgram Filesのデータを読み書きするのって各ユーザー毎に仮想フォルダ作って
勝手にやってくれんじゃなかったっけ?
具体的にはどういう風になんの?
正直Vistaなんて糞OS使った事もないから知らんが。
249:デフォルトの名無しさん
08/12/06 20:20:51
全ユーザー共通のINIファイルじゃないとダメってソフトでも
なければさほど問題はなさそうな気もする
つかこれってINIファイルに限らず他のセーブデータにも
言える事だろ
250:デフォルトの名無しさん
08/12/06 23:21:36
「Program Filesに置いたらVistaで問題が出る。」っていうのは、他の
スレでも見たような気がするが、実際何がどう問題なのかわからん。
すくなくとも、exe本体が存在するProgram Files下のアプリケーション
フォルダ内にiniファイルを作成して読み書きは問題なく動作している
けどな。
Administrator権限以外じゃダメとかなら、Vistaに限らず2000やXP等でも
問題になりそうな気がするし、セキュリティ上、別のログインユーザーに
iniファイル内容を見られると困るというなら、All Usersに置いても同じ
だと思う。
251:デフォルトの名無しさん
08/12/06 23:40:23
別のログインユーザに見られたら困る、じゃなくて
別のログインユーザから見られないから困るんでしょ。
Program FilesやHKLMに無駄に書き込むソフトなんざそもそもマルチユーザを前提としていないので
これらの挙動はソフトとしては想定外なわけで。
あと、管理者権限を持つプロセスから呼ばれると仮想ストアじゃないとこから設定ファイル読みに行ってNotFoundとか。
なんにせよUAC程度で不具合出るようなソフトは単純に行儀悪いだけだと思う。
252:デフォルトの名無しさん
08/12/07 00:27:46
>>251
そうそ
Program Filesにおいちゃうとアドミニ権限ないと
書き込めないし見れないんだよね
なんでアドミニ権限ないユーザが起動すると落ちるソフトとか結構あったりする
253:デフォルトの名無しさん
08/12/07 00:35:26
行儀が悪いのはむしろこういう勝手な事をOSにさせるMSだと思うが
別にユーザー毎の設定で問題ないアプリなら不具合にならないわけだし
結局の所はケースバイケースって事でしょ
ゲームアプリのセーブデータなんかはプログラムフォルダ内に入れとかないと
セーブデータ残したままアンインストールする場合、普段ユーザーが見ない所に
ファイルが残るしな
「行儀がいい」と「頭が固い」を履き違えてるんじゃね
254:デフォルトの名無しさん
08/12/07 00:43:20
>>253
いや、権限によってはProgram Filesを見れないから
アプリの起動自体できない
設定ファイルがないって感じで落ちる
ケースバイケースじゃなくてこう作らないと駄目ってところまできてる
255:デフォルトの名無しさん
08/12/07 00:48:55
さすがにそれは設定ファイルが存在することを前提にプログラムを組む方がおかしい
なかったらデフォルト値で動かすのが普通。
256:デフォルトの名無しさん
08/12/07 00:51:59
>>254
設定ファイルがないと動かないなんて作りになってるのは
ProgramFilesだろうがなんだろうが終わってるだろ
257:デフォルトの名無しさん
08/12/07 00:59:36
>>256
仮にProgramFilesが駄目だったら今度どこに保存すんの?
258:デフォルトの名無しさん
08/12/07 01:06:21
Vistaは持ってないけどこの認識であってる?
1.ファイルを読むだけだったらProgram Filesから行われる
2.書き込みが発生した場合、バーチャルストアで行われる
3.一度書き込みが発生したファイルは、バーチャルストアで読み書きが行われる
Program Filesから読めないとか、どこに保存するとか言ってる人がいるから混乱してきたが。
この認識が違うなら>>254に詳しい説明をしてほしい
259:デフォルトの名無しさん
08/12/07 01:11:29
>>258
そんなのセキュリティのポリシーの設定で変わるじゃん
駄目にしてある会社だったら読み取りも駄目だろ
260:デフォルトの名無しさん
08/12/07 01:15:46
その場合ってそのユーザにアプリって起動できんの?
インストールの設定も含めて
261:デフォルトの名無しさん
08/12/07 01:29:36
仮にそういうセキュリティ設定になってたとしたら
INIファイルどころかあらゆるセーブデータの読み書きができなくなるわけだから
INIファイルをどうしようが結局同じことだと思うけど
まあどうしても全てのユーザーで動作させたいんだったら全セーブデータを
>>244のようにするか、レジストリに全てぶっこむしかないだろうね
アホ臭いとしか言いようがないが
262:デフォルトの名無しさん
08/12/07 01:45:39
でもきちんと対応するってならそれっきゃないってことだろうな
まあ、業務でそういうところに当たらないとも限らないからちょっとメモっておこ
担当者がキチだと普通にこういうの要求されるよね
263:デフォルトの名無しさん
08/12/07 03:54:39
>>254
ファイルが読めないなら起動に必要なデータファイルはどこから読むんです?
264:234
08/12/07 04:26:59
豚切り失礼します。
>>236さん
遅くなりましたが、回答ありがとうございます。
そうですか。UNICODEはINIファイルとして使えないのですね。
勉強になりました。
265:デフォルトの名無しさん
08/12/07 12:46:44
>>258
3.が違う
266:デフォルトの名無しさん
08/12/07 16:07:48
>>265
どう違うの?
267:デフォルトの名無しさん
08/12/07 20:53:50
言ってみたかっただけじゃね。
268:デフォルトの名無しさん
08/12/08 01:31:32
CとC++の違いってヘッダがiostreamになって使う関数が違う以外にないの?
こんなんでオブジェクト施行とか騒いじゃってるの?拍子抜けなんだけど
269:デフォルトの名無しさん
08/12/08 01:38:10
クラス、テンプレート、多重定義、例外処理……、
オブジェクト指向に関係あるものないもの、CになくてC++にある機能なんていくらでもあるが。
270:デフォルトの名無しさん
08/12/08 01:49:56
クラスなんて構造体に毛がはえたようなものしょぼいんだよはっきりいって
271:デフォルトの名無しさん
08/12/08 02:18:40
馬鹿野郎!
それのおかげでインテリセンスの恩恵があるんだろうが!
272:デフォルトの名無しさん
08/12/09 00:47:26
C→C++の一番の利点は
コードが見やすいこと、これに尽きるだろ
C++に慣れるとCのでっかいコードは耐えられん
クラス化したくてウズウズしてくる
変数途中で宣言したくなる
273:デフォルトの名無しさん
08/12/09 00:51:53
C言語の勉強やってからC++に移行したほうが良いだろうか
それとも最初からC++から勉強しても問題ない?
274:デフォルトの名無しさん
08/12/09 00:57:11
>>258
バーチャルストアに書き込むのはマニフェストがない場合だけだよ。
マニフェストがあればあとは管理者権限への移行が成功すれば直接書くことになる。
275:デフォルトの名無しさん
08/12/09 01:19:02
>>273
いきなりC++でいいと思う。
共通する事柄はいずれにせよ学ぶことになるし、
Cで良く使うテクだけどC++ではあまり使わないのとか意外とあるし。
276:デフォルトの名無しさん
08/12/09 01:24:14
>>275
把握したありがっとう
277:デフォルトの名無しさん
08/12/09 03:21:41
>>274
つかそれって結局管理者権限で実行するってことじゃねーの?
他のシステムファイルからみとかで管理者権限が必要でマニフェストに組み込まれた
アプリじゃなければ>>258のようになるってことっしょ?
278:デフォルトの名無しさん
08/12/09 10:30:08
>>277
マニフェストがない場合、管理者権限でもバーチャルストア行き。
279:デフォルトの名無しさん
08/12/09 10:52:59
マニフェストがないという言い方は正しくない
280:デフォルトの名無しさん
08/12/09 12:44:06
一連の流れをみててもどうもわかりにくいです。
人によって言ってる事が違うというか。
管理者、制限ユーザー、マニフェスト関連で正確な挙動に
ついての詳細情報が掲載されてるサイトないですか?
VistaだけでなくXPや2000での情報も欲しいです。
281:デフォルトの名無しさん
08/12/09 14:48:03
>>280
一次情報源としてMSDNライブラリなど
例えばここらへん。
URLリンク(msdn.microsoft.com)
URLリンク(msdn.microsoft.com)
URLリンク(msdn.microsoft.com)
URLリンク(technet.microsoft.com)
282:デフォルトの名無しさん
08/12/09 15:11:06
日本語でおk
283:デフォルトの名無しさん
08/12/09 15:16:27
初心者スレで英文持ち出してくるヤツは死んでいいと思うよ
日本と米で仕様が違うのもよくある事だしな
284:デフォルトの名無しさん
08/12/09 15:26:18
英文にしか情報がないようなことを初心者スレで質問するヤツは死んでいいと思うよ
285:デフォルトの名無しさん
08/12/09 21:38:14
>>284
初心者なんだから分からんだろ。
286:デフォルトの名無しさん
08/12/09 21:50:21
非標準言語のしか資料が無いと言うことが判っただけでも大きな進歩であり、
革新的な質問であったことは確定的に明らか。
287:デフォルトの名無しさん
08/12/09 22:55:05
誰か日本語でわかりやすくまとめてくだちぃ
288:デフォルトの名無しさん
08/12/09 23:24:08
ホームエディションだと管理者か制限ユーザーのカテゴリわけだけで
細かい設定はないんだよな
プロフェッショナルの管理者による厳しいセキュリティ設定まで考慮してもきりがないと思う
どうやっても管理者次第で動かない設定にできるんだし
XPホームエディションでProgramFilesに入れたアプリを制限ユーザーで動かしてみたけど
普通にINIファイルを含むセーブデータを読み書きできた
Vistaでマニュフェストの指定なしだとこの読み書きがバーチャルストアになるってことか
それを想定して動くつくりであればセーブデータもプログラムと同じフォルダでいいんじゃね
289:デフォルトの名無しさん
08/12/10 01:08:56
まぁ仮想ストアは救済策ってーか、MSお得意の泥臭い互換性の維持だからな。
多分将来的にはユーザーのデフォの権限を制限ユーザーにしたいんだろうが、
それVistaでやっちゃうとProgram Filesに書き込むアプリなだけで動かなくなるわけだし。
マニフェスト無しでほっとくのも止めやしないが、管理者権限のコマンドプロンプトやファイラから
起動したら別々の設定ファイルをうっかり作っちまうとかも起こりうるので、
requireAdministratorで起動毎にUACダイアログを出した方がいい。
そしてアプリのユーザーにダイアログをうざがられてAppDataに
書き込まざるを得なくなるというプレッシャーこそがUACの真意だとかなんとか。
290:デフォルトの名無しさん
08/12/10 02:03:25
かなりどうでもいい条件付けだな
291:デフォルトの名無しさん
08/12/10 11:56:44
VS 2003からVS 2008にしてみました
C++のソースファイルはUTF-8で書かれていて、VS 2003では概ね問題なくコンパイルできていました。
ところがVS 2008のcl.exeは、このソース内に定数として書かれた文字列を勝手にSJISに変換して内部処理するようです。これでは正常動作できません。
この余計な機能を、何とか避ける方法はないのでしょうか?
膨大な量があるので、今さらファイルをSJISに戻すとかすることは不可能なんです。
292:デフォルトの名無しさん
08/12/10 12:03:53
コードページは?
293:デフォルトの名無しさん
08/12/10 12:10:24
普通にコマンドプロンプトを開いて作業しているので、932のシフトJISです。
294:デフォルトの名無しさん
08/12/10 12:15:05
すいません、本当に簡単なことなのですが
if(argc == 3){
if(argv[1] == L"-o"){
if((fp = fopen("argv[2]", "w")) == NULL){
printf("出力ファイルをオープンできません.\n");
exit(1);
}
fclose(fp);
}
この
if(argv[1] == L"-o") の条件が通りません。
コマンドで test -o test1 のように打っても違うものとして認識しているようで・・・
画面にプリントしてみると同じなのですが、Lをつけるとデータが違うものになってしまうのでしょうか?
295:デフォルトの名無しさん
08/12/10 12:16:52
chcpで変えてみては?
つーか、UTF-8でダメな例が思いつかないな、再現可能なソース無いですか?
296:デフォルトの名無しさん
08/12/10 12:18:44
>>294
文字列の比較に直接 == は使えません。
297:デフォルトの名無しさん
08/12/10 12:29:10
>>291
コンパイルエラーなのか動作が変なのか
エラーメッセージがあればそれを書いてもらうと何かわかるかもしれません
>>294
argvの型はTCHARですか
298:デフォルトの名無しさん
08/12/10 12:39:28
またどこの言語からの転向者だろ
VSつながりでVBかC#あたりか
299:デフォルトの名無しさん
08/12/10 12:40:19
template <typename Foo, typename Bar> class Baz : public Bar { なんたら
void Qux( const Quux<Foo,Bar> & foobar ) {...};
};
class Bar { なんたら }; // (1)
VC2008で上のをもう少し複雑に書くと Baz::Qux での引数の型 Quux<Foo,Bar> が
(1) の Bar と解釈されてコンパイルエラーになってしまう
GCCだと通るんだけどなあ
300:デフォルトの名無しさん
08/12/10 12:40:36
>"argv[2]"
この書き方はPerlかPHPだろう
301:デフォルトの名無しさん
08/12/10 12:52:34
もともとCとVBAをやってました
>>296
やっぱりstrcmpを使わないとだめですか?
>>297
int _tmain(int argc, _TCHAR* argv[])
こう宣言してます
302:デフォルトの名無しさん
08/12/10 12:53:27
もともとCとVBAをやってました
>>296
やっぱりstrcmpを使わないとだめですか?
>>297
int _tmain(int argc, _TCHAR* argv[])
こう宣言してます
303:デフォルトの名無しさん
08/12/10 12:57:44
>>302
はい。
304:デフォルトの名無しさん
08/12/10 12:59:15
if( _tcscmp(argv[1],"-o") == 0 ) {
では
305:デフォルトの名無しさん
08/12/10 13:00:32
if( _tcscmp(argv[1],_T("-o")) == 0 ) {
では
306:デフォルトの名無しさん
08/12/10 13:01:43
if (_tcsicmp(argv[1],_T("-o")) == 0) {
では
307:デフォルトの名無しさん
08/12/10 13:03:35
>>304さんの方法でやってみたところ
エラー 1 error C2664: 'wcscmp' : 2 番目の引数を 'const char [3]' から 'const wchar_t *' に変換できません。(新しい機能 ; ヘルプを参照)
というようなことを言われました。
どうもこの変換できないというところが理解できないです。代入しているわけでもないのに何故?って感じです。
308:デフォルトの名無しさん
08/12/10 13:04:55
#include "stdafx.h"
#include "string.h"
#include "stdlib.h"
int _tmain(int argc, _TCHAR* argv[])
{
FILE *fp;
if(argc == 3){
if( _tcscmp(argv[1],"-o") == 0 ){
if((fp = fopen("argv[2]", "w")) == NULL){
printf("出力ファイルをオープンできません.\n");
exit(1);
}
fclose(fp);
}
else{
printf("USage :\n");
printf("-o : **********\n");
}
}
else{
printf("引数の数が違います");
}
return 0;
}
これが全文です。
309:デフォルトの名無しさん
08/12/10 13:14:00
通常 "-o" の文字リテラルは char で構成される
文字セットがユニコードの場合 _tsccmp は _wcscmp にマップされる
_wcscmp が要求する型は const wchar_t * だからエラーになる
_T マクロは文字セットにあわせてユニコードの場合には "-o" を L"-o" と変える
L"-o" はワイド文字 wchar_t で構成されるリテラルだから通る
すまん思いきり間違えた 304は俺
310:デフォルトの名無しさん
08/12/10 13:18:33
UNICODEに拘らなければANSI Cで十分なんだよな
311:デフォルトの名無しさん
08/12/10 13:21:00
>>309
解決しました!ありがとうございます
312:デフォルトの名無しさん
08/12/10 13:47:31
>>291で質問した者です
再現可能なソースを作っていて気がつきました。
chcp 65001やchcp 437としても動作が同じで、文字列リテラルが強制的にSJISに内部変換されていることが分かりました。
UTF-8のソースファイルなのですが、「BOM」を付けると、このような動作になるようです。
BOMを付けないUTF-8だと、warning C4819 が山ほど出て、化ける文字までありますが、何とかなりそうです。
今回作った下の再現プログラムも、BOMありのUTF-8と、BOM無しのUTF-8では、動作が違ってきます。
#include <iostream>
int main()
{
std::cout << "項目" << std::endl;
return 0;
}
一応解決したことにします。ありがとうございました。
313:デフォルトの名無しさん
08/12/10 15:35:09
すみません>>294で質問したものですが、
同じソースで _tcscat(argv[2],L".txt"); という処理を入れ、作成ファイルをテキスト形式にしようと思ったのですが
出力されたファイルが、テキストではなくファイルで出力されてしまいます。
画面表示させるとちゃんと****.txt となっているのですが・・・
314:デフォルトの名無しさん
08/12/10 15:49:13
>>313はスルーしてください
アホくさい間違いでしたので(汗
315:デフォルトの名無しさん
08/12/10 22:29:54
Visual C++を使用していて、ちょっと困ってしまったので助けてください。
下記画像のようにスペース部分に色つき矢印やらドットやらが表示されて消えなくなってしまいました。
どこかでキーボード押し違えたみたいで・・
この設定の解除の仕方を分かる方いたら教えてください><
↓
URLリンク(imepita.jp)
316:デフォルトの名無しさん
08/12/10 22:38:27
メニュー > ヘルプのキーボード何とかに一覧がある
317:552
08/12/10 23:45:14
ヘルプで見ても、そもそもコレが何なのか解らないので検索できないので
教えていただけませんか?
318:552
08/12/11 00:19:36
質問に答えてくれなかったからってこんなこと言うのもなんだけど
なんか、プログラマーって陰湿な性格の人が多いよね。
解るんなら教えてくれればいいじゃん。初心者用のスレだった気がするけど。
ついでに、編集→詳細→スペースの表示で自己解決しました。
だれも教えてくれんかった。
319:デフォルトの名無しさん
08/12/11 00:47:38
今MIDIファイルを開くっていうプログラムを作りたいのですが、
よろしければ教えてください。
バージョンはVC++2005 AEです。
320:319
08/12/11 00:53:28
319ですがGETFILE関数を使いたいです。
よろしくお願いします。
321:デフォルトの名無しさん
08/12/11 02:15:04
>>318
君が質問したのは3、4時間前だろ?
誰もが同じスレをずっと監視してサポートセンターのように対応してくれるとでも思ってんのか?
自分で解決したならそれでいいし、自分で色々やってもできなかったらまた質問すりゃいいだろ
陰湿なのはちょっとレスがない程度でふてくされる君の思考回路だよ
322:デフォルトの名無しさん
08/12/11 02:29:37
>>318
オマエみたいなパーデンネンを弾くために、みな時間置いてから答えるようにしてるからね。
ゴクローサン。
323:デフォルトの名無しさん
08/12/11 07:33:14
>>315
[編集]→[詳細]→[スペースの表示]
324:デフォルトの名無しさん
08/12/11 09:53:49
>>318
つーかその質問、定期的に出るんでうんざりなんだけど。
過去レス調べることもできないのかよ。
あと質問なんか1日くらい待てや、答える人が24時間張り付いてるわけじゃないぞ。
325:デフォルトの名無しさん
08/12/11 10:10:52
こんにちわ。Visual C++でOPENGLを用いてゲームを作ろうと思うのですが、
ウィンドウを振動させるやり方がわかりません。。
何かコマンドややり方があるのならアドバイスください。よろしくお願いします。
※JAVASCRIPTでウィンドウを振動させるみたいな感じです。
326:デフォルトの名無しさん
08/12/11 10:18:59
>>325
SetWindowPos APIとrand関数を使え
327:デフォルトの名無しさん
08/12/11 10:28:02
もの凄く気軽に「こんなソフトありませんか?」
スレリンク(software板:331番)
331 名前:名無しさん@お腹いっぱい。[] 投稿日:2008/12/11(木) 09:50:07 ID:mvBU1EDM0
こんにちわ。
アクティブウィンドウを振動させるようなフリーソフトってありますか?
OPENGLで実験中にウィンドウを揺らしたいのですが・・・コマンドも分からないし、出来ないので外部のツールで強引にしようかと。。
よろしくお願いします。
328:デフォルトの名無しさん
08/12/11 10:45:36
>>315
Ctrl+R、 Ctrl+Wを続けて入力
329:デフォルトの名無しさん
08/12/11 10:58:16
>318
試験勉強みたいに頭の中に全部記憶する必要ない。
というか情報量多すぎるからその都度自分で調べて解決していかないとだめ。
初心者の場合はどうやって調べたらいいかわからないから
調べ方を教えてあげるのが重要。
答えだけ教えたんじゃ、いつまでたっても自分で調べられようにならない。
330:M
08/12/11 11:35:21
今、VC++でMFCを用いたプログラムを作成中で、そのプログラムでRS232C通信を行いたいのですが、RS232c通信のプログラムの部分だけAPIを用いて記述したいのですがどのようにすればいいのでしょうか?
方法があれば教えてください。お願いします。
331:デフォルトの名無しさん
08/12/11 11:42:17
>>330
ここなんかどうだろ?
URLリンク(www.ee.fukui-nct.ac.jp)
332:デフォルトの名無しさん
08/12/11 11:43:59
>>326
2つともよく分からないまま検索したらMOVEWinfowというのもあるみたいで、if関数を用いて頻繁に座標をずらし振動させることにしました。
こんなんでいいのかな??
マルチすいません。ありがとうございます。
333:M
08/12/11 11:48:46
>>331
ありがとうございます。
このプログラムをMFCのプログラムにどのように組み込めばいいのでしょうか?
あほな質問ですみません。。
334:デフォルトの名無しさん
08/12/11 12:55:47
>>333
WM_COMMANDメッセージでコマンドを受け取ったら、main関数の中身を実行すれば?
335:デフォルトの名無しさん
08/12/11 14:11:02
ファイルの読み書きとほとんど同じだな
やってる内容が理解できれば使えるだろ
336:M
08/12/11 14:27:45
>>334
それでやってみようと思います。ありがとうございました。
337:デフォルトの名無しさん
08/12/11 16:38:53
VC++2008使ってます
LogItemという独自クラスを作り、
LogItem item;
ListBox.add(item);
といったことしてます(単なるリストボックスへの追記)。
表示を変更する際に、
ListBox.add(〜.format("{1}・・・",item.name,・・・))
等とすると、今度は削除時にいろいろ面倒です。
表示を適切に変更できるものの、削除時は、
ListBox.remove(item)でいけるような
(追記時の表示に依存しないような)
簡単な方法はご存じありませんか?
参考になりそうなサイトやキーワードを
教えていただければ幸いです。
338:デフォルトの名無しさん
08/12/11 16:41:26
16ピンのPIC16F819のPICを利用してサーボモータや光電センサー、ディスプレイを制御したいのですがBASICのプログラムが分かりません
サーボモータは Futaba S3002 を使用
・計7個のサーボモータ使用
・ボタンを押して入力したものをサーボモータに出力〔右に90度⇒左に90度〕
光電センサーは鏡とセンサーの間を通過するのを検出するもので omron E3R-R2E4 を使用
・コインを検出してカウントする
・6個使用
ディスプレイは数字と文字の両方を表示したいです
まとめると、コインを光電センサで検出してその検出したコインをディスプレイに表示する。たまボタンを押すとサーボモータが回転
するものを作りたいです。
この動作をBASICのブログラムで制御させるには、どのようなプログラムにすればいいですか
339:デフォルトの名無しさん
08/12/11 16:43:58
>>338
ここはBASICのスレでもPICのスレでもない。
340:デフォルトの名無しさん
08/12/11 19:13:55
337です。
自己解決しました。単なる調査不足&ありがちな混乱、でした
※ToStringをオーバーライドすればいいんですね・・・。
ってか。
質問の大半も意味不明でした。正確には「リストボックスにオブジェクトを
そのまま追加した時に、表示のみを変更できるようにしたい。」とすれば
よかったんでしょうね・・。
お騒がせいたしました。ほかに困っている人の助けになれば幸いです^^;
341:デフォルトの名無しさん
08/12/11 21:14:25
Visual C++ 2008 Express Editionについての質問です。
Windowsフォームアプリケーションプロジェクトを作成し、
フォームにボタンとpictureBoxを配置しました。
ボタンを押すと、pictureBoxのプロパティで設定した画像の画素値を取得したり
描きこんだりしたいと思い、画像にアクセスする手段を模索することにしました。
どうもpictureBoxクラスから直接画像にアクセスすることはできず、
いったんBitmapクラスに移さないといけないことが分かりました。
これでSetPixel関数を使って、画素値を書き換えることができるようになったのですが、
これをまたpictureBoxに戻して表示することができません。
コードは以下の通りです。(ボタンを押したときの処理関数)
Bitmap bmp = pictureBox1->Image;
bmp.SetPixel( 10, 10, Color::Red );
pictureBox1->Image = bmp; ← これで型が合わないというようなエラーが出る
どのようにすればpictureBoxの画像を加工し、それを表示することができるのでしょうか?
342:デフォルトの名無しさん
08/12/12 16:23:46
pictureBox1->Image = Image::FromHbitmap(bmp.GetHbitmap());とかでどう?
343:デフォルトの名無しさん
08/12/12 17:44:23
すいません。C++でint型の変数ををchar型の配列にキャストして入れる方法ってどうやるのですか?
int iAnswer = 0;
int i = 0;
char ChAnswer[256];
ChAnswer = (char)i;
とやっているのですが、変換できないといわれます。
344:デフォルトの名無しさん
08/12/12 17:46:28
ChAnswer[0] = (char)i; じゃないの?
345:デフォルトの名無しさん
08/12/12 17:51:27
>>344
それだと、例えば123を変換した場合、1だけ変換ということになりそうな気がするのですが・・・違いますか?
346:デフォルトの名無しさん
08/12/12 18:00:16
>>345
何でそう思うのか、、もっと基礎からやり直すか
具体的にやりたいこと書いて手取り足取り教わるしかないと思うよ。
347:デフォルトの名無しさん
08/12/12 18:02:26
>>346
すいません。よく考えてたら頭の中にあったものが2次元配列でした・・・それにしても変な考えですけど。
逝ってきます。
348:デフォルトの名無しさん
08/12/13 00:30:18
エスパー回答で言わせてもらえばsprintf()使えばいいと思うよ
349:341
08/12/13 07:31:03
>>342
それでできました!
ありがとうございました!!
しかし、.NET環境でもWin32apiレベルのビットマップハンドルを意識した記述をしないと
いけないのはどうなのかと思いました・・・
C++ Builderはもっとシンプルになりますし・・・
350:デフォルトの名無しさん
08/12/13 09:01:26
>>341
たぶんこうすればいける。
Bitmap^ bmp = gcnew Bitmap(pictureBox1->Image);
bmp->SetPixel(10, 10, Color::Red);
pictureBox1->Image = bmp;
Imageプロパティの型はImageへのハンドル。
にもかかわらず、341ではコード上Bitmapそのものを渡すようになっている。
本来、BitmapはImageの派生なので、Bitmapのハンドルなら渡せるというわけ。
351:341
08/12/14 00:49:49
>>350
.NETでのハンドルという概念があるんですね。
勉強になりました。
ありがとうございました。
352:デフォルトの名無しさん
08/12/14 03:25:51
VC2008EEで↓がコンパイルできるようにする
やり方を教えてください。
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd)
{
return 0;
}
353:デフォルトの名無しさん
08/12/14 03:28:02
エラーは↓です
1>.\a4.cpp(4) : error C2146: 構文エラー : ';' が、識別子 'WinMain' の前に必要です。
1>.\a4.cpp(4) : error C2065: 'HINSTANCE' : 定義されていない識別子です。
1>.\a4.cpp(4) : error C2146: 構文エラー : ')' が、識別子 'hInst' の前に必要です。
1>.\a4.cpp(4) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>.\a4.cpp(4) : error C2059: 構文エラー : ')'
1>.\a4.cpp(5) : error C2143: 構文エラー : ';' が '{' の前にありません。
1>.\a4.cpp(5) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)
354:デフォルトの名無しさん
08/12/14 03:36:58
>>353
WINAPIが定義されてないっぽい感じのエラーメッセージだけど、
windows.hはインクルードされてるしなぁ。
355:デフォルトの名無しさん
08/12/14 03:49:57
>>352
普通にコンパイル通ったよ
プロジェクトの作成の仕方じゃないの?
ファイル→新規作成→プロジェクトの種類→Win32→Win32プロジェクト
356:デフォルトの名無しさん
08/12/14 12:25:43
Vc++2008でプロジェクトを開いた時に、
▲ InteliSenseデータベースファイル C\......\Visual Studio\Projects|\ソリューションフォルダ\ソリューション.ncb を書き込み用に開けなかったため、
InteliSense 情報は VC++プロジェクトにりようできません。
ソリューションディレクトリが読み取り専用である場合、他の機能にも影響を及ぼします。
ってダイアログ出て、関数の引数とかが表示されなくなってしまいました。
フォルダの属性変えてみようとしたんだけど読み取り属性外せなくなったんですが、対処方ありますか?
他のソリューションでは問題ありません。ファイル壊れた?
357:デフォルトの名無しさん
08/12/14 17:24:46
メッセージの通りだろ
358:デフォルトの名無しさん
08/12/14 18:02:51
ncb ファイル消せばいい。
359:デフォルトの名無しさん
08/12/15 09:28:10
ボタンを二つ作ってサブクラス化しています。
DefStaticProcA = (WNDPROC)GetWindowLong(hBTNa, GWL_WNDPROC);
SetWindowLong(hBTNa, GWL_WNDPROC, (LONG)TestProc);
DefStaticProcB = (WNDPROC)GetWindowLong(hBTNb, GWL_WNDPROC);
SetWindowLong(hBTNb, GWL_WNDPROC, (LONG)TestProc);
if(DefStaticProcA == DefStaticProcB)
MessageBox(NULL, _T("同じ"), _T("button"), MB_OK);
ボタンのプロシージャはみんな同じアドレスに成るのでしょうか?
プロシージャを一つにまとめたいです。
360:デフォルトの名無しさん
08/12/15 10:48:05
HWND HBTNv6[1000];
WNDPROC DefStaticProcBTN[1000];
void MakeButtonV6(HWND hWnd){
int i;
for(i = 0; i < 1000; i++){
HBTNv6[i] = CreateWindow(_T("BUTTON"), _T("A"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 30, 30, 20, 20, hWnd, NULL, hInst, NULL);
if(HBTNv6[i] == INVALID_HANDLE_VALUE){
MessageBox(NULL, _T("Error"), _T("CreateWindow"), MB_OK);
break;
}
DefStaticProcBTN[i] = (WNDPROC)GetWindowLong(HBTNv6[i], GWL_WNDPROC);
if(DefStaticProcBTN[i] == 0){
MessageBox(NULL, _T("Error"), _T("GetWindowLong"), MB_OK);
break;
}
if(i > 0){
if(DefStaticProcBTN[i] != DefStaticProcBTN[i -1]){
MessageBox(NULL, _T("違う"), _T("ぼ"), MB_OK);
break;
}
}
}
MessageBox(NULL, _T("終了"), _T("m"), MB_OK);
}
保障されているのかな〜。誰か教えて。
361:デフォルトの名無しさん
08/12/15 10:52:55
何がしりたいのかわからん。
登録したウィンドウクラスにプロシージャも入ってるだろう。
でも同じプロセス内で差し替えできるから作った時期で違うようにはできる。
362:360
08/12/15 11:38:13
ごめん、無かったことにして。
363:デフォルトの名無しさん
08/12/15 17:35:59
>>359
さらに別のだれかがサブクラス化しているなどといったこともあるから、
一般に同じと仮定することは危険。
ウィンドウハンドルと元のウィンドウプロシージャのどれとどれが対応するのか
分かるように保存しておけば、それぞれのアドレスが異なっていても
同じウィンドウプロシージャでサブクラス化できるはずだ。
364:デフォルトの名無しさん
08/12/15 22:35:59
3×n行のCSVファイルを読み込んで内部テーブル(?)にして、
後からそれを1行ずつ抽出してその項目を使って別の処理をするように今あるプログラムを書き換えたい。
VC++2005、WindowsXPで作業してます。
かなりの初心者ですがどうぞよろしくお願いします。
365:デフォルトの名無しさん
08/12/15 22:41:01
宿題なら宿題スレで一発ですよ。
そうでないなら、どこは分かるけどどこが分からないというのをもっとはっきりさせてください。
366:デフォルトの名無しさん
08/12/15 22:53:16
宿題じゃないんす・・・仕事なんですw
CArrayとか使ってみたんだけど、なかなかうまくいかず・・・
あと、内部テーブルを1行ずつ読み込んでループさせる方法がよくわからん。
レベル低い質問で申し訳ないです
367:デフォルトの名無しさん
08/12/16 00:18:30
誰か来てくれると信じて書いてみるw
INT CLogFileConditions::LoadAllSearchInfo()
{
CCSVFile file;
CFileException fError;
CString sSearchListFile;
m_iResID = 0;
m_iConditionStatus = 0;
sSearchListFile = g_CurrentDir;
sSearchListFile += LOG_SEARCH_LIST_FILE;
if( file.Open( sSearchListFile, CFile::modeRead, &fError) )
{
CString strLogKind, strServerName, intSearchLength, sVal ;
m_LogKindToPath.RemoveAll();
while( file.ReadString() )
{
if( file.GetFieldCount()>=3 )
{
strLogKind = file.GetField(0);
strServerName = file.GetField(1);
intSearchLength = file.GetField(2);
}
368:つづき
08/12/16 00:20:27
}
file.Close();
if( !m_LogSearchCondition.GetCount() )
{
m_iResID = IDS_ERR401;
m_iConditionStatus = 401;//ErrorIDNumber
}
}
else {
m_iConditionStatus = -1;
MsgBoxBySystemErrID( m_hwndParent,
fError.m_lOsError,fError.m_strFileName );
}
return m_iConditionStatus;
}
みたいな感じで処理条件を読み込む処理をまず作りたい。
ひとつめのレスの最後の方の処理をCSVを読み込む二次元配列にしたいんだ。
どうぞお力をお貸しください。。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4353日前に更新/248 KB
担当:undef