こんにちは、honiyonです。

 VC++で、MFCを用いてNT用のサービスプログラムを作成しています。

 ATL COM AppWizardで、サービスアプリケーションを選択したので、atlbase.hが StdAfx.hに宣言されています。
 CString型を使いたいので、該当cppファイルに、afxwin.hをincludeしました。
何故か StdAfx.hより先に afxwin.hをincludeすると、CStringの定義が正しくされないようなので、後にもってきています。

#include "StdAfx.h"
#include <AfxWin.h">

 この状態だと、atlbase.h, AfxWin.h双方で windows.hをincludeしているようで、AfxWin.hが参照する afxv_w32.hで、以下のようなエラーが発生します。

fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>

 この問題を回避するために、atlbase.hやAfxWin.hを改造して回避出来そうですが、それは今後別のものを作る時の支障になりそうなので避けたいです。
 その他の方法で回避する事は出来ないでしょうか?

 宜しくお願いします(..

A 回答 (1件)

「windows.h」を変更して良いなら、「windows.h」の先頭と最後に下記を追加してみてください。



(先頭)
#ifndef _windows_h_include
#define _windows_h_include

(最後)
#endif /* _windows_h_include */

これで二重includeは回避できます。(_windows_h_include の部分は一例です。分かりやすいラベルにしてください。)
    • good
    • 0
この回答へのお礼

こんにちは、honiyonです。

 ご回答ありがとうございます(^^)
 極力、元からある(?)ヘッダ等に変更は加えたくないと思います。

 まだ windows.hは覗いていなかったのですが、その宣言は無かったんですね(^^;
 その変更は加えておいた方が今後とも便利そうです。

 今回は、atlbase.h中の、#include <windows.h>を取り除いたファイルを別途用意し、 #include "atlbase_org.h"; のような感じで StdAfx.hの atlbase.hの宣言を置き換える事で対応してみました。
 現在の所、問題なく動作しています。

 ありがとうございました(..

お礼日時:2002/02/21 15:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QJames Taylor「Steamroller Blues」の耳コピ

楽譜を買うお金が無く、James Taylor「Steamroller Blues」を耳コピしようとしているのですが、変則的なチューニングをしているみたいで色々試してみましたが音が合いません。。。

6弦が半音下げチューニングぐらいしか聞き取れませんでした。

もしご存知の方いればご教授お願い致します。

Aベストアンサー

「Steamroller Blues」はノーマルチューニング3カポEフォームでプレイしていると思われます。急いで回答しているので、確証は持てませんが、昔自分はそれでコピーしました。マイナー9thや9thコードが出てくるのがよくあるブルースとは違いますが、それ以外はオーソドックスなブルース進行です。本人の様々なビデオを見ても変則チューニングをしているようには見えません。確認できれば又回答します。

QC言語のプログラムで#includeを使わず#includeだけで

C言語のプログラムで#include<math.h>を使わず#include<stdio.h>だけで√(sqrt)を表現することは可能でしょうか?

Aベストアンサー

ご自分で sqrt 関数を作れば可能です。
こんな感じでしょうか。

#include <stdio.h>

static double
sqrt (double s)
{
 double x = s / 2.0;
 double last_x = 0.0;

 while (x != last_x)
 {
  last_x = x;
  x = (x + s / x) / 2.0;
 }

 return (x);
}

int
main (int argc, char * argv[])
{
 printf ("sqrt (%f) = %f\n", 3.0, sqrt (3.0));
}

QフェンダーBLUES JUNIORのスピーカーをJENSEN C12N

フェンダーBLUES JUNIORのスピーカーをJENSEN C12N に交換したいのですが可能でしょうか?
電気の知識は皆無なのでスピーカーだけ買って楽器店に持ち込もうかと思っていますが、自分でできるものなのでしょうか?
よろしくお願いします。

Aベストアンサー

可能です。(同じ口径、取り付けピッチは標準化されている。)
誰でも出来ます。
接続は差込式、少しゆすりながら引く、プライアー等で電線圧着基部をくわえて引いても良い。
手順は自ずと解ります。

Q「fatal error C1189」を回避するには?

かなりの初心者でございますm(__)m。

先日のことですが「Visual Studio .net 2003」から「Visual Studio 2005」へアップグレード(というよりは切り替え)を行いました。

すると2003では問題なくビルド出来たものが2005では「fatal error C1189」が出てしまい困っております。

エラーメッセージ
fatal error C1189: #error : Need to include strsafe.h after tchar.h

確かにtchar.hはインクルードしているので、これを文字通りに解釈して後にstrsafe.hをインクルードしたのですが、メッセージは変わらず(--;)。

どの辺りをチェックしたら良いか教えていただけると助かります。

OSはXP、VisualStudioのSP1はあてていません(エラーでSP1がインストール出来ないため)。

Aベストアンサー

C1189 はコンパイル指令 #error によるものらしいので
Fatal Error C1189 (C++)
http://msdn2.microsoft.com/en-us/library/y0tzt8e0(VS.80).aspx

#error Need to include strsafe.h after tchar.h

というのを検索してみると、
vc/include/tchar.h に

#ifdef _STRSAFE_H_INCLUDED_
#error Need to include strsafe.h after tchar.h
#endif

というのが見つかりました。

tchar.h, strsafe.hのほかにどんなファイルを includeしているか
わかりませんが、間接的にでもどこかから strsafe.h をすでに
読みこんでしまっているということはありませんか?
そうでもなければこのシンボルが定義されることはないように思うのですが。

ざっと見たところ、vc8/include と vc8/PlatformSDK/include には
strsafe を独自に取り込むようになっているファイルはないですね。
#まあ当然か

C1189 はコンパイル指令 #error によるものらしいので
Fatal Error C1189 (C++)
http://msdn2.microsoft.com/en-us/library/y0tzt8e0(VS.80).aspx

#error Need to include strsafe.h after tchar.h

というのを検索してみると、
vc/include/tchar.h に

#ifdef _STRSAFE_H_INCLUDED_
#error Need to include strsafe.h after tchar.h
#endif

というのが見つかりました。

tchar.h, strsafe.hのほかにどんなファイルを includeしているか
わかりませんが、間接的にでもどこかから strsafe.h をす...続きを読む

QT-01C PCから移動したPDF閲覧方法について

REGZA Phone T-01Cを使用しています。

PCとT-01CをUSBデータケーブルで接続し
PCからPDFファイルを移動させ、携帯端末より
PDFファイルを参照しようと試みております。

そこでご質問させて頂きたいのですが
どの場所にPDFファイルを格納すればよいでしょうか。

AITIA
Android
arcsoft
DCIM



とフォルダがあるのですが、どのフォルダに格納すればよいかわかりません。

ご教授頂けると大変有難いです。

Aベストアンサー

PDFを見るアプリのフォルダがあればそこでもいいですし、
特に特定のフォルダじゃないとダメということはありません。

SDCARDにPDF-FILE とでもフォルダ作って分かりやすく
保存すれば良いですよ。

Q#include

#include <stdio.h>の <> の意味と
#include "xxxxx.h"の "" の意味を教えてください。

Aベストアンサー

厳密な定義を、「JIS X3010:2003 - 6.10.2 ソースファイル取り込み」から引用します。

---- 引用ここから ----
制約 #include指令は, 処理系で処理可能なヘッダ又はソースファイルを識別しなければならない。
意味規則 次の形式の前処理指令
    # include <h文字列> 改行
は, 処理系定義の場所を順に探索して, <区切り記号と>区切り記号の間で指定した文字列で一意に決まるヘッダを見つけ, そのヘッダの内容全体でこの指令を置き換える。どのようにして探索の場所を指定するか, またどのようにしてヘッダを識別するかは, 処理系定義とする。
 次の形式
    # include "q文字列" 改行
は, 二つの"区切り文字の間で指定した文字列で一意に決まるソースファイルの内容全体で, この指令を置き換える。指定したソースファイルの探索順序は処理系定義とする。この探索をサポートしていない場合, 又は探索が失敗した場合, 同じ文字列(もしあれば>文字を含めて)を含む次の知れに読み替えたのと同じ規則で再処理する。
    # include <h文字列> 改行
---- 引用ここまで ----

要するに、<xxx>の場合は処理系定義のヘッダ(ファイルとは限らない)を取り込み、"xxx"の場合はソースファイルを取り込むということです。いずれも探索場所やその順序は処理系定義です。

よくある誤解は、
・ヘッダは必ずファイルである。
・"xxx"ではカレントディレクトリや取り込もうとしたファイルと同じディレクトリから探索を始める。
といったものです。このように実装されている処理系が多いことは確かですが、標準規格ではそのような規定はありません。
使用している処理系がどのような実装になっているかは、マニュアルに記載があるかと思います。

厳密な定義を、「JIS X3010:2003 - 6.10.2 ソースファイル取り込み」から引用します。

---- 引用ここから ----
制約 #include指令は, 処理系で処理可能なヘッダ又はソースファイルを識別しなければならない。
意味規則 次の形式の前処理指令
    # include <h文字列> 改行
は, 処理系定義の場所を順に探索して, <区切り記号と>区切り記号の間で指定した文字列で一意に決まるヘッダを見つけ, そのヘッダの内容全体でこの指令を置き換える。どのようにして探索の場所を指定するか, またどのようにして...続きを読む

QC++ BuilderでPDF出力

C++ Builder3を使ってます。印刷する代わりに、PDFファイルとして出力する方法があると聞いているんですが、ソースコードをどのように記述したらよいのかご存知の方がいらっしゃいましたら教えていただけないでしょうか。
よろしくお願いいたします。

Aベストアンサー

PDFはAdbeアクロバットで出力されるファイル形式です。インターネット上でみられるAcrobat readerはこのリーダー部のみを切り出したものです。
PDFファイルを生成したい場合、標準的には
Adbe Acrobatを購入してインストールすると、
Adbe PDF
という仮想プリンタが追加されます。(古いバージョンだとPDF Writerでしょうか)
あとは、作成されたプログラムからこの仮想プリンタを指定して普通どおり印刷すれば、PDFが作成されます。

最近ではクセロPDF
http://xelo.jp/xelopdf/
というソフトがフリーであるようです。
私はつかったことがないのですが、結構利用者もおられるようす。
見当されてみるのもよいかもしれません。

参考URL:http://www.adobe.co.jp/products/acrobat/main.html

Q   #include

   #include<stdio.h>
#include<math.h>

int main(void)
{
int i,n,limit;
printf("data? ");
scanf("%d",&n);
i(n>=2){
limit=int)sqrt(n);
for(i=limit;i1;i--){
if(n%i==0)
break;
}
if(i==1)
printf("素数\n);
else
printf("素数でない\n");
}
return 0;
}

というプログラムがあるのですが、それを改良して int型(符号付32ビット整数)および、unsigned int型(符号なし32ビット整数)のそれぞれの最大の素数を求めよという問題があり、ただし、エラトステネスのふるいは使わずに、上のプログラムを改良してみよという問題がどっかにあったんですが、全然わからないので、教えてください。

   #include<stdio.h>
#include<math.h>

int main(void)
{
int i,n,limit;
printf("data? ");
scanf("%d",&n);
i(n>=2){
limit=int)sqrt(n);
for(i=limit;i1;i--){
if(n%i==0)
break;
}
if(i==1)
printf("素数\n);
else
printf("素数でない\n");
...続きを読む

Aベストアンサー

最初に。
このプログラム、ところどころ打ち間違いがあります。直しておきましょう。
i(n>=2){
limit=(int)sqrt(n);
for(i=limit;i>=1;i--){

まず、プログラムを、機能ごとに分けて考えます。

printf("data? ");
scanf("%d",&n);
が素数判定する数値nを決めるところ

if(n>=2){
から return 0 ; の前の
}
までがn が素数かの判定しているところ
です。

では、改造に入ります。
intの範囲での最大の素数、ということなので、 intの最大値 から順番に素数判定を行い、最初に見つかった素数が、求める値、となります。

元はnをキーボードから入力しています。
これをキーボード入力ではなく、プログラム中で「intの最大値 から順番に」するには、どうしたらいいと思いますか?

元の判定部は
if(i==1)
printf("素数\n);
else
printf("素数でない\n");
です。これは n に対して「素数/素数でない」と表示されます。
改造するときに
・「素数でない」という表示は必要でしょうか?
・「素数」という表示ではnはわかりません。 nも表示するにはどうしたらいいと思いますか?
・素数が見つかったら、ループを抜けないと、int型の全ての素数を表示するプログラムになってしまいます。ループを抜けるにはどうしたらよいでしょうか?

以上の考えかたで、改造できると思いますが、いかがでしょうか。

unsigned int版へは次の2点を変更します。
・計算に使う変数はunsigned intにする必要がある。
・nはunsigned intの最大値から順番に

最初に。
このプログラム、ところどころ打ち間違いがあります。直しておきましょう。
i(n>=2){
limit=(int)sqrt(n);
for(i=limit;i>=1;i--){

まず、プログラムを、機能ごとに分けて考えます。

printf("data? ");
scanf("%d",&n);
が素数判定する数値nを決めるところ

if(n>=2){
から return 0 ; の前の
}
までがn が素数かの判定しているところ
です。

では、改造に入ります。
intの範囲での最大の素数、ということなので、 intの最大値 から順番に素数判定を行い、最初に見つかった素数が...続きを読む

Qこの質問は、PDFファイル・C・著作権・JIS・きかくに関係あります

最終的にしたいことは、
C言語の規格(日本語)が印刷されたものが手に入ればいい(自分で印刷するのでもOK)のですが、
どうすればよいでしょうか。

C言語の日本での規格はJIS X3010というものです。

http://www.jisc.go.jp/
日本工業標準調査会 というサイトの「データベース」で「X3010」で検索すると、「JIS詳細表示」というページが表示されまして、
X3010_01.pdfというPDFファイルがダウンロードできます。

(さきほどやってみたら、勝手にファイルを開こうとするようだ。Acrobat Readerが入っていなかったから、ファイルを保存できたのかも知れない。)

ダウンロードしたpdfファイルをAcrobat Reader5.0で開きますと、内容を読むことができます。
それで印刷できればよいのですが、印刷ができないような設定がされているのでしょうか(?)、メニューがきえてしまって印刷できません。


正確なことはよく知らないのですが。
・JISの規格は「JIS規格票」というものに印刷されて発行されているらしい。
・JIS規格票とは別に、JISハンドブックというJISの規格をまとめたような本があるのだが、その中にC言語の規格は入っていないようだ。
・JISの規格には著作権があるらしい。
・「X 3010:93」というものとそれを補完(?)するような「X 3010:96」というものがあるらしいのだが、前者を入手すれば後者を入手しなくて良いのか(前者に後者は織り込み済みなのか)はよくわからない。


その規格票というものを入手するには、どうすればよいのでしょうか。
「政府刊行物センター」で売っているんでしょうか。

図書館などでコピーできればそれでもいいのですが…
私が行った図書館には、「JISハンドブック」はあったんですが…


以上いろいろ書きましたが、わかることだけで結構なんでお教えください。
(例えばJISのことはわからなくても、pdfファイルのこととか。)

最終的にしたいことは、
C言語の規格(日本語)が印刷されたものが手に入ればいい(自分で印刷するのでもOK)のですが、
どうすればよいでしょうか。

C言語の日本での規格はJIS X3010というものです。

http://www.jisc.go.jp/
日本工業標準調査会 というサイトの「データベース」で「X3010」で検索すると、「JIS詳細表示」というページが表示されまして、
X3010_01.pdfというPDFファイルがダウンロードできます。

(さきほどやってみたら、勝手にファイルを開こうとするようだ。Acrobat Reader...続きを読む

Aベストアンサー

ご希望の規格表は、下記URLで確認できました。
わたしは、いつもここから購入しました。

2行目の購入の仕方のページでpdfファイルの方をクリックすると注文書が表示されます。(アクロバットリーダーは必要です。リーダーは無料ですから入手しておくと便利です。)
それでファイル(F)>印刷(P)で印刷し、記入したらFAXで注文します。(これは印刷できそうです。)
私は、前に購入した時にもらった物を使用しましたが。
支払方法は、そこに記載がありますが指定できます。

私の場合は、時々業務で使用しましたので常時、予納金にしておきました。
在庫は、確認しておりませんので、一応電話で確認された方が良いかもしれません。

参考URL:http://www.jsa.or.jp/catalog/catalog09.asp,http://www.jsa.or.jp/catalog/jis_srch.asp

Q#include

#include <stdio.h>

struct st
{
char a[3];
short b;
char c[7];
long d;
char e[5];
};

int main(void)
{
printf("%d\n",sizeof(struct st));
return 0;
}

コンパイルオプションでアライメントを変化させながら(1,2,4,…)
sizeof(struct st)の変化を見たいのですが、コンパイルする時に
どのようにすれば良いのでしょうか?当方、gccを使用しております。

あと、ついでなんですが、警告オプションは-Wと-Wallしかないのでしょうか?

Aベストアンサー

GCCのマニュアル
http://gcc.gnu.org/onlinedocs/index.html
日本語訳は古いバージョンのしか見つからなかった。

> アライメントを変化させながら
http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable-Attributes

コンパイラオプションでやるなら、-Dでマクロを使うなりして。
インテルプロセッサだと
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options

> -mpreferred-stack-boundary=num
> -mincoming-stack-boundary=num
というあたりも関係あるかも

>警告オプションは-Wと-Wallしかないのでしょうか
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/Warning-Options.html#Warning-Options

GCCのマニュアル
http://gcc.gnu.org/onlinedocs/index.html
日本語訳は古いバージョンのしか見つからなかった。

> アライメントを変化させながら
http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable-Attributes

コンパイラオプションでやるなら、-Dでマクロを使うなりして。
インテルプロセッサだと
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options

> -mpreferred-stack-boundary=num
> -mincoming-stack-boundary=num
とい...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング