トップページ⇒tech
1001コメント329KB

【初心者歓迎】C/C++室 Ver.32【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/10/15(日) 15:30:51
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.30【環境依存OK】 (重複スレ実質Ver.31)
http://pc8.2ch.net/test/read.cgi/tech/1156145593/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0153アフォルトの名無しさん2006/10/21(土) 18:30:35
たとえば、

try
{
throw new NullPointerException();
}
catch( NullPointerException e )
{
e.printStackTrace();
}

こんな感じのJavaの例外処理をC++に置き換えたいとすれば、
どうなる?C++にNullPointerExceptionってないよね。
NullPointerExceptionに相当するクラスを作って投げなきゃいけないよね。
でも、どんなクラスにすればいいんでしょうか
0154デフォルトの名無しさん2006/10/21(土) 18:45:58
>>153
std::exception から派生させたクラスとして、 what() を適当に実装すればいい。
スタックトレースは無理。 throw するときに new しちゃだめ。 catch は const& で受ける。
0155アフォルトの名無しさん2006/10/21(土) 19:04:41
#include <iostream>
#include <exception>

class nullpointerexception: public std::exception { };



int main(void){
try{
throw nullpointerexception();
}
catch(std::exception& e){
std::cerr << e.what() << std::endl;
}


return 0;
}


こんなん書いてみたんだけど、
no named exception thrown
ってでるよ。
0156デフォルトの名無しさん2006/10/21(土) 19:13:06
>>155 >>154
0157デフォルトの名無しさん2006/10/21(土) 19:32:25
>>151
>>152
ヒープはよくわからないので。
スタックを増やしたら実行できました。
ありがとうございました。
01581442006/10/21(土) 19:34:03
>>145
回答どうもです


配列から生成したイメージを、DirectXをつかってtextureにしたい
のですが、CreateDIBSectionで可能なんですか?
0159デフォルトの名無しさん2006/10/21(土) 20:12:48
vc7.1とか8.0とかでつかえるinttypes.hはありますか?
0160デフォルトの名無しさん2006/10/21(土) 20:18:15
>>158
くだすれDirectX(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1132965206/
0161デフォルトの名無しさん2006/10/21(土) 20:20:51
>>159 http://www.google.co.jp/search?q=vc+inttypes
0162デフォルトの名無しさん2006/10/21(土) 23:15:13
.net2003で、C++を勉強し始めて2日目になります。

テンプレートメソッドパターンの勉強中なんですが、
#include<iostream>

template <class T,T>
T ave(T a,T b) {
return (a + b) / 2;
}
main() {
using namespace std;
cout << ave<int,int>(1203, 3344) << endl;
}

とすると、
Question.cpp
Question.cpp(11) : error C2975: 'ave' : 'function-parameter' に対するテンプレート引数が無効です。コンパイル時に評価可能
な定数式が必要です。
Question.cpp(4) : 'ave' の宣言を確認してください。

と出てしまいます。
文法的に正しくするとしたら、どうすればいいですか。
01631622006/10/21(土) 23:17:22
すみません、テンプレートメソッドではなく、
ただのテンプレートでした。
0164デフォルトの名無しさん2006/10/21(土) 23:20:54
>>162
エラーメッセージが遠いな。

× template <class T,T>
○ template <class T>

× ave<int,int>(1203, 3344)
○ ave(1203, 3344)
01651622006/10/21(土) 23:29:04
>>164
ありがとうございます。

他の例で、

template <class T,T>
T max(T a,T b) {
return (a > b) ? a : b;
}
mainの中で、
cout << max(2,5) << endl;

この場合は、<class T>ではなく、<class T,T>にしないと動かないのですが、
違いはなんででしょうか。
0166デフォルトの名無しさん2006/10/21(土) 23:35:51
>>165
cass T だと、どうなる?
0167デフォルトの名無しさん2006/10/21(土) 23:37:51
>>165
maxは標準に既に用意されている。
別の名前で試してみ。
01681622006/10/21(土) 23:41:21
>>166 >>167
max2にしたら、コンパイル通るようになりました。
試していたのが、max min 等だったので、今まで偶然 標準関数ばかりを
試していたようです。
ありがとうございました。
0169デフォルトの名無しさん2006/10/22(日) 00:03:34
void func( char* begin, char* end );

int main(){
std::vector<char> v;
func( &*v.begin(), &*v.end() );
}

このコードをVisualC++のSTLを使って
実行すると、*v.end()のところで
"vector iterator not dereferencable"とアサートに引っ掛ります。
STLPortでは引っ掛りません。
言わんとしていることはわかるのですが、これに対する対策をどうしてよいやら
がわかりません。

template< typename iterator >
void func( iterator begin, iterator end );
にすると、関数のオーバーロードに引っ掛りマズー

template< typename value_type >
void func( std::vector<value_type>::iterator begin, std::vector<value_type>::iterator end );
にするとstd::vector以外使えなくなってマズー

いったいどうすればいいと思いますか?
0170デフォルトの名無しさん2006/10/22(日) 00:18:44
>>169
if (!v.empty()) { char* begin = &v[0]; func(begin, begin + v.size()); }
0171デフォルトの名無しさん2006/10/22(日) 00:44:39
>>170
お答えありがとうございます。
その方法をとって、以下のようにしました。
void func( char* begin, size_t size );
0172アフォルトの名無しさん2006/10/22(日) 11:08:40
C++にはjavaのthrowsに相当するような、メソッドの呼び出し元に対して
例外処理を丸投げする仕組みはないんでしょうか。
ないとしたら、それを再現するようなうまい方法って知りませんか
0173デフォルトの名無しさん2006/10/22(日) 11:40:49
class Image1 {
public:
vector<double> db1;//
vector<double> db2;//
};

class Character1 {
public:
vector<Image1> img;// Image1のデータ
};
vector<Character1> chara1;
0174173続き2006/10/22(日) 11:42:04
int main(int argc,char *argv[]){
for(int j = 0; j < 2; j++){
// 5人分キャラクターを作成
chara1.reserve(5);
for(int i = 0; i < 5; i++){
chara1.push_back(Character1());
}

chara1[0].img.reserve(2);
for(int i = 0; i < 2; i++){
chara1[0].img.push_back(Image1());
}
chara1[0].img[0].db1.push_back(0.5);
chara1[0].img[0].db1.push_back(1);
chara1[0].img[0].db1.push_back(1.5);
chara1[0].img[0].db2.push_back(10);

/*
chara1[0].img[0].db1.clear();//
chara1[0].img[0].db2.clear();//
chara1[0].img.clear();//
*/

chara1.clear();// データを消去
}
return 0;
}

こんな風にした場合は、コメントの中の部分は要る?
あってもなくても正常に動きはしたけど…
0175デフォルトの名無しさん2006/10/22(日) 11:51:53
>>172
これらじゃ用件を満たさない?

void f0(){
throw exception();}

void f1(){
try{
throw exception();}
catch(...){
throw;}
0176デフォルトの名無しさん2006/10/22(日) 11:53:20
>>173
いらない
0177デフォルトの名無しさん2006/10/22(日) 12:25:01
>>172
C++にもJavaのthrowsのようなものはあるにはあるが、
コンパイル時にチェックされるわけではないなどの理由から原則使わない。
使わなくても全ての例外はJavaのRuntimeExceptionの如く自動的に呼び出し元へ伝わる。
0178アフォルトの名無しさん2006/10/22(日) 12:49:11
>>175


throw;って投げるエラーかかないと何のエラーがどこに投げられるの?
0179デフォルトの名無しさん2006/10/22(日) 13:46:46
>>178
catch の中で実行された場合は、現在処理中の例外を外に投げる。
それ以外の場合は死ぬ。
0180デフォルトの名無しさん2006/10/22(日) 13:49:07
>>178
catch文の中でthrow;のように投げるものを書かない場合は、
受け取った元の例外オブジェクトを投げるということを意味する。catch(...)以外でも次のように必要。
#include <iostream>
#include <stdexcept>
int main() {
    try {
        try {
            throw std::runtime_error("hoge");
        } catch(const std::exception& e) {
            throw;
        }
    } catch(const std::runtime_error&) {
        std::cout << "std::runtime_error" << std::endl;
    } catch(const std::exception&) {
        std::cout << "std::exception" << std::endl;
    }
}
もしthrow;をthrow e;とすると、オブジェクトをコピーすることになり、スライシングされてしまう。
つまりeの静的な(つまりソースコード上の)型であるstd::exception型のオブジェクトを投げることになる。
throw;では元のstd::runtime_errorを投げることになり、外側のcatchでもstd::runtime_errorとして受け取ることができる。
0181アフォルトの名無しさん2006/10/22(日) 14:24:49
なるほど。大変よく分かりました。さんきう
0182デフォルトの名無しさん2006/10/22(日) 15:08:48
std::numeric_limitsって、windows.hと共存できないんでしょうか?

#include <limits>
//#include <windows.h> //このコメントはずすとエラー
#include <iostream>
int main(){
std::cout << std::numeric_limits<int>::max() << std::endl;
return 0;
}
01831822006/10/22(日) 15:17:06
解決
すみません、ググったらでてきました
#define NOMINMAXをwindows.hの前に定義すると
うまくいきました
0184デフォルトの名無しさん2006/10/22(日) 16:53:06
ウィンドウズXPでウィンドウソフトを作っています。
処理をさせているときに突然勝手にウィンドウが閉じて
終了します。何が主な原因でしょうか?
0185デフォルトの名無しさん2006/10/22(日) 16:56:37
>>184
エスパーで解答すると、
ウインドウプロシージャの中で使っているswitch文のbreakを書き忘れているとか。

まあ、超エスパーの降臨を待てよ。
0186デフォルトの名無しさん2006/10/22(日) 17:03:03
あるいは、その「処理」とやらが、何十秒もかかるようなものだったら、
別スレッドに移すことか。

HKEY_CURRENT_USER\Control Panel\Desktop\AutoEndTasksの値が1だったら、
一定時間応答のないアプリケーションを自動的に強制終了する。

とはいっても、これデフォで0だから違うだろうけど。
0187デフォルトの名無しさん2006/10/22(日) 18:15:09
>184
あなたが作っているのはコンソールプログラムと見た。
int main(){
  略
 sleep(10); /*ここを追加*/
return 0; }
でコンパイルしてみ。
01881842006/10/22(日) 18:57:10
すいません説明不足でした。
ウィンドウズソフトです。コンソールプログラムではありません
さっきパフォーマンスモニタを観察していたら、強制終了される処理の部分で
Handle Countが異様に増えていきました。ファイルハンドル解放わすれかな
と思いましたので、調べてみます
0189デフォルトの名無しさん2006/10/22(日) 20:06:06
2007年のクリスマスは、サンタクロースの大井競馬場での騎乗のため
中止となります。また、それに伴いましてクリスマスイヴやプレゼント交換会
も中止となります。ご了承下さい
http://2chart.fc2web.com/2chart/2007kurichuusi.html
また、昨年お伝えしましたように、2006年のクリスマスも中止です。
http://2chart.fc2web.com/2chart/2006kurisumasuchuushi.html

毎年、各所でこのような楽しいクリスマスの風景が見られましたが
自粛でお願いします。
http://2chart.fc2web.com/2chart/tanosiikurisumsu.html
0190デフォルトの名無しさん2006/10/22(日) 20:32:04
/*
* list4a.c
*
*/
#include <stdio.h>

int x = 10;
extern int y; /* externは実はなくても動く */

int main(void)
{
extern int z;

printf("x=%d y=%d z=%d\n", x, y, z);

return 0;
}


/*
* list4b.c
*
*/
int y = 20;
int z = 30;


externの実験なのですが、
これを動作させるにはどうすればいいのでしょうか?
list4a.cだけを実行させても動きません。

0191デフォルトの名無しさん2006/10/22(日) 20:35:42
>>190
「動きません」って、どうなるんだ?
list4b.c もコンパイルしてリンクしないとダメだよ。
0192デフォルトの名無しさん2006/10/22(日) 20:40:32
>>191
それってどうすればできますか?
とりあえずそれぞれ.objっていうのが出来たんですが。
0193デフォルトの名無しさん2006/10/22(日) 20:43:07
>>192 コンパイラの使い方を調べろ。
0194デフォルトの名無しさん2006/10/22(日) 20:47:50
VCでやれば意識しないでいいぞ〜
0195デフォルトの名無しさん2006/10/22(日) 20:48:41
>>192
環境くらいかけよ

大抵のコンパイラはhoge.c foobar.cのようにファイル名並べてやればうまくやってくれる
.obj作れたんなら自分でリンカでなんとかできるはず
0196デフォルトの名無しさん2006/10/22(日) 20:59:58
>>195
できました。
bcc32 hoge.c foobar.c で。
どうもありがとう。
0197デフォルトの名無しさん2006/10/22(日) 23:00:36
bccかよ!
0198デフォルトの名無しさん2006/10/23(月) 00:41:13
>>196
コンパイル済みのobjからexe作成したい場合はリンカ直接呼べばいい。
ilink32 c0x32.obj hoge.obj foobar.obj, hoge.exe, , cw32.lib, ,

※c0x32.objはスタートアップモジュール(コンソールアプリ)。GUIならc0w32.obj、dllならc0d32.obj
 cw32.libは標準ライブラリのスタティックリンクライブラリ。マルチスレッドの場合はcw32mt.lib
0199デフォルトの名無しさん2006/10/24(火) 18:55:44
メインウィンドウのスタイルにWS_CLIPCHILDRENを追加し、
ステータスバーを追加。
起動して、マウスでウィンドウを小さく(タイトルバーだけにする)と下の部分の描写がおかしくなります。
InvalidateRectやUpdateWindowをステータスバーに指定しても変わりません。
どうしたらいいのでしょうか。。。?それともメインウィンドウにWS_CLIPCHILDRENを指定してはいけないのですか?
0200デフォルトの名無しさん2006/10/24(火) 23:44:28
>下の部分の描写がおかしくなります
それだけじゃわからん
0201デフォルトの名無しさん2006/10/24(火) 23:46:20
すいません、すごく初歩的な質問で申し訳ないのですがファイルを分割して変数や関数がどのファイルで通用するか考えた場合、
スコープはグローバル変数と関数は全てのファイルで通用、ただし両方ともstaticをつけるとスコープは内部リンゲージになる。

ローカル変数はブロック内でstaticをつけると内部リンゲージになる。
ただしグローバル変数に関して別のファイルの無指定のグローバル変数を利用するときは(staticをつけない場合のことです)
externという指定をつけたヘッドファイルを読み込んでコンパイルしないと正しく使うことができない

という理解でよろしいでしょうか?
分かりにくい文章でごめんなさい
0202デフォルトの名無しさん2006/10/25(水) 01:42:34
>>201
ちょっとおかしい。

×リンゲージ
○リンケージ

×ヘッドファイル
○ヘッダファイル

ローカル変数は( extern を付けて宣言しない限り)リンケージなし。
static を付けた場合、記憶クラスが変わる。
0203デフォルトの名無しさん2006/10/25(水) 02:36:45
きっと>>201は、リンゲージを飲んでヘッドファイルになっちゃったんだよ。
もともと頭おかしかったみたいだし。
0204デフォルトの名無しさん2006/10/25(水) 10:40:37
エディットコントロールで文字の中央揃えをしたいのですが
Create時に指定するのではなく動的に変更する場合
どのようにしたらいいでしょうか?
02052042006/10/25(水) 10:46:58
スレ違いでした。
02062012006/10/25(水) 19:16:08
>>202
すいませんw ちょっと疲れてたので書き間違いをしてしまいました
リンケージとヘッダファイルですね。

ローカル変数はexternをつけると別のファイルでも通用する
staticをつけるとそのファイルのみ通用する
何もつけないとブロック内のみ通用する

これで完璧ですか?
0207デフォルトの名無しさん2006/10/25(水) 20:34:32
ダメだこりゃ
0208デフォルトの名無しさん2006/10/25(水) 20:39:27
エクス y=ー( ゚д゚)・∵.ターン
0209デフォルトの名無しさん2006/10/25(水) 20:41:34
関数ブロック内で、externを付けて宣言すると、
外で宣言したのと同じくグローバル変数の宣言になる。
(ただしそれが見えるスコープはそのブロック内限定)
0210デフォルトの名無しさん2006/10/25(水) 21:03:23
static
  そのスコープ内で(ファイル・関数)一回だけ初期化し、その後領域を保持しつづけてくれる
エクス y=ー( ゚д゚)・∵.ターン
  誰かが外に造っているはずと期待し本体の置き場は(基本的に)他ソースにあることを想定
0211デフォルトの名無しさん2006/10/27(金) 12:33:43
c言語初めて1ヶ月で壁に当たっています。 
レベル低くて申し訳ないんですが教えてください。 

scanf("%s",str)で^zを判断する方法が知りたいです 

おねがいします
0212デフォルトの名無しさん2006/10/27(金) 12:43:53
あー来た来たw

>>211
DOS系OSならscanf()の戻り値を判断せよ。入力が閉じられている筈だから変換に失敗したことになるので0のはずだ。
Unix系OSなら単純に収容されるからstrchr(str, '\x1a')でもするってところかな。
0213デフォルトの名無しさん2006/10/27(金) 12:51:16
>>212
ありがとうございます。
先ほど私もその方法を試してみたのですが
scanfの戻り値の型がわからず代入時にエラーがでてしまいます

int chk;
chk = scanf("%s",str);
if (chk == 0){
〜〜

おかしいでしょうか?
0214デフォルトの名無しさん2006/10/27(金) 13:01:03
これだけヒントが並んでも未だに自分の環境を語らない>>213w
おまけにエラーが出たと言いつつエラーメッセージも張らないし。
先ずはコミュニケーションのレベル上げから始めた方がいいんでない?
0215デフォルトの名無しさん2006/10/27(金) 13:11:16
>>214
すいませんでした><
環境はbcc5.5.1 + DOS です
エラーメッセージは出ず異常終了します
0216デフォルトの名無しさん2006/10/27(金) 13:44:15
>>213
ヘッダファイル見れば?
scanfでぐぐれば?

確かEOFが返った気がする
0217デフォルトの名無しさん2006/10/27(金) 13:51:53
ヘッダファイルにそこまで書いてあるとは思わないが、>213のケースなら0ではなくてEOFだろうな。
0218デフォルトの名無しさん2006/10/27(金) 14:05:22
> scanfの戻り値の型がわからず

に反応しただけです。
0219デフォルトの名無しさん2006/10/27(金) 14:53:01
やっぱりCは難しいな…
0220デフォルトの名無しさん2006/10/27(金) 15:24:47
コンパイラ : VC2005
クラスが巨大なので、クラスを書いたファイルとmainのあるファイルを別にしたのですが、
どうすればmainのあるファイルで、別ファイルにあるクラスが使えるようになるんでしょうか。
ただの関数なら共通ヘッダにプロトタイプを書けば良いというのは分かるんですが。
0221デフォルトの名無しさん2006/10/27(金) 15:33:08
>>220
クラスのインターフェースだけをヘッダファイルに書く。
実現部は別ファイルでよい。
0222デフォルトの名無しさん2006/10/27(金) 15:35:41
>>221
ありがとうございました。
0223デフォルトの名無しさん2006/10/27(金) 17:46:42
環境:VS2005を使用しています。

ダイアログで日付と時刻を表示するプログラムを作っています。
日付と時刻が連結された状態で入ってくるのですが、下記のような
コードを記述したところ
Run-Time Check Failure #2 - Stack around the variable 'cBuf' was corrupted.
というエラーが発生してしまいました。
メモリを破壊しているようなのですがなぜ壊れているのかわかりませんでした。
分かる方いましたらお教えください。お願いします。

以下コード抜粋
m_DateStr = _T("2006/10/21 30"); //日付と時刻が入っている。

wchar_t cBuf[2];
_tcscpy_s(cBuf, sizeof(cBuf), m_DateStr.Right(2));
0224デフォルトの名無しさん2006/10/27(金) 17:58:06
>>223
その関数には、バッファの「文字数」を指定する必要がある。
バッファの「バイト数」ではない。
char型の場合は、文字数はバイト数と同じだが、
wchar_tの場合は違う。

TCHAR str[256] ;
size_t number_of_chars = sizeof(str) / sizeof(TCHAR) ;

そもそも_tcsとつくのは、マクロで置き換わるわけだから、
wchar_tを直接使うのであれば、wcscpy_s()を直接呼んだほうがいいと思うのだけれど。
0225デフォルトの名無しさん2006/10/27(金) 18:11:08
>>224
出来ました。
すごく分かりやすい解説をありがとうございました。
0226デフォルトの名無しさん2006/10/27(金) 19:57:31
クラスのインターフェースってなんですか?
0227デフォルトの名無しさん2006/10/27(金) 21:27:27
>>226
とりあえず何か本でも買って一通り勉強した方がいいよ
0228デフォルトの名無しさん2006/10/27(金) 22:35:26
>>226
C++ではメソッドのシグニチャだ。
0229デフォルトの名無しさん2006/10/27(金) 22:58:19
ようするに、とことん大雑把に言えばそのクラスがどんなメンバを持っているかということ。
0230デフォルトの名無しさん2006/10/28(土) 03:55:32
MFCとかのライブラリって
何段階も継承してるけど、あそこまでやる必要あるの?
0231デフォルトの名無しさん2006/10/28(土) 07:21:36
指→手→腕→体→一歩前へ→歩け

歩かせるのに指の動作から指示し直してたら効率悪いってことだろ。
納得行かなければ自分で改良してやんな
0232デフォルトの名無しさん2006/10/28(土) 09:26:54
・C++にテンプレートが無い時代だった
・オブジェクト指向と言えば継承な時代だった(包含しない)
0233デフォルトの名無しさん2006/10/28(土) 16:12:06
そういえば、今はテンプレート時代だな。
0234デフォルトの名無しさん2006/10/29(日) 17:26:02
VS.NET 2005です。
iostreamから1行getlineをしてstringを得たいのですが、途中でchar[128]などのバッファを使わず、一気にstringをとる方法はありますか?
string s = stream.getline(); のようなものを期待しています。
0235デフォルトの名無しさん2006/10/29(日) 17:31:36
>>234 std::getline()
02362342006/10/29(日) 17:33:01
すみません解決しました
fstream >> string
0237デフォルトの名無しさん2006/10/29(日) 17:34:16
>>236
それだと空白で途切れるよ。
0238デフォルトの名無しさん2006/10/29(日) 17:49:54
>>236
>>237の言うとおりだ。std::getline使え。
0239デフォルトの名無しさん2006/10/30(月) 00:53:21
char buf[256];
fgets(buf, sizeof(buf), stdin);
という記述を良く見かけますが、
sizeof(buf)は256なので、もし256文字分入力されたら
bufの最後の\0が入らなくてよろしくない結果になったりしないのですか?
0240デフォルトの名無しさん2006/10/30(月) 01:01:05
なぜ試さない?
0241デフォルトの名無しさん2006/10/30(月) 02:37:05
>>239を見て、ためしに「fgets NULL」でぐぐったら、最初のページでもう答となる記述を見つけた。
1分で自己解決できることをなぜ質問するのか、理解に苦しむ。
0242デフォルトの名無しさん2006/10/30(月) 03:01:17
初心者だからだよ
0243デフォルトの名無しさん2006/10/30(月) 03:16:53
ネットの?社会生活の?
0244デフォルトの名無しさん2006/10/30(月) 03:39:36
両方
0245デフォルトの名無しさん2006/10/30(月) 15:54:46
質問です。
int *a,
int b=100;
*a=&b;
printf("%d",*a);

char *a="a"
printf("%c",*a);

char *a="abcde";
printf("%s",a);

文字や数字を表示させる時は*をつけるのに、文字列の場合は*をつけないのはなぜですか?
文字の場合は値の内容なのに、文字列の場合はアドレスで文字表示ができるのが
理解できません。何て言えばいいのかよく分からないので、
質問が解りにくくてすみません。
よろしくお願いします。
0246デフォルトの名無しさん2006/10/30(月) 16:05:40
>>245
Cの文字列は'\0'で終端するcharの配列だからだよ。
配列の内容を参照するだけなら、直接渡すのではなく
先頭アドレスを渡すことで事足りる。
だからオブジェクトじゃなくて先頭を示すポインタを渡してる。おわり。
0247デフォルトの名無しさん2006/10/30(月) 16:09:31
認識できない前処理命令です

ってエラーはどういうことでしょうか・・・?
msxmlをimportしようとして、VCならいけるんですが
Solarisではコンパイルエラーになってしまいます。

どなたか救いの手を…。
よろしくおねがいします。
02482472006/10/30(月) 16:10:46
認識できない前処理指令
でした。
よろしくおねがいします。
0249デフォルトの名無しさん2006/10/30(月) 16:36:31
>>247
#importはVC++独自拡張。他のコンパイラには存在しない。
0250デフォルトの名無しさん2006/10/30(月) 16:56:53
#importはオートメーション、Windowsべったり。msxmlもWindowsもの。
Solarisに移植ですか・・・xmlライブラリ探してそれ使う所は自分で書かなきゃだね。
0251デフォルトの名無しさん2006/10/30(月) 17:07:28
COMってUNIXでも使えなかったっけ?
02522502006/10/30(月) 17:44:30
おぉ、COMの仕様はOSに依存しないのか。普及してるのかな。
■ このスレッドは過去ログ倉庫に格納されています