この先メーラーでも作ってみたいなぁって思って、今、一から勉強しているのですが、
どうもWinSockのバージョンチェックをする部分でエラーが発生します
最初WSADATA構造体を宣言しようとしたらエラーが起こります
MFCの場合はWindowsヘッダーはインクルードする必要ないんですよね?
エラー内容はただ「'WSADATA'定義されていない識別子です」とでるだけです
う~ん、どこがおかしいのでしょうか?

A 回答 (1件)

StdAfx.h ファイルに


#include <afxsock.h> してみてください。

AfxSocketInit() するのも忘れないで…。

プロジェクトを作成するときに
「Windows ソケット」を選択しわすれたのだと思います。
    • good
    • 0
この回答へのお礼

>プロジェクトを作成するときに
>「Windows ソケット」を選択しわすれたのだと思います。
まさしくそのとおりでした(^^;
無事解決しました~
SpiralGalaxyさん、ありがとうございます

お礼日時:2001/10/12 17:12

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

このQ&Aを見た人が検索しているワード

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

Qヘッダーの中でヘッダーをインクルードすると?

「自作ヘッダーAの中で別の自作ヘッダーBをインクルードする」
という事はどういう意味になり、どういう事が起こるのでしょうか?

「自作ヘッダーAの中で別の自作ヘッダーBをインクルードする」と
自作ヘッダーAの中で、
Bをインクルードした位置より下に定義した定数や構造体は
未定義とエラーが出てしまいます。
(は2回以上自作ヘッダーAをインクルードした時のみですが。)

なぜこのような症状が現れるのでしょうか?

>コンパイラ:VC++ 2008 EE

Aベストアンサー

動作としては単にAのテキストの #iinclude "B.h" の位置にB.hのテキストが展開されるだけです。
恐らくBの中にエラー若しくは実行部があるものと思われます。

Qwinsockを使ったネットワークプログラミングについて。 Winsockを使用したプログラムに悪戦

winsockを使ったネットワークプログラミングについて。
Winsockを使用したプログラムに悪戦苦闘中なんですが、送信用関数にsend,sendto、受信用関数にrecover,recvfromがありますよね。ネット等で調べた結果「TCPではsendとrecv,UDPではsendtoとrecvfromを主に使う」との記載を目にしました。
では例えばですが、パソコンA,Bがあったとして、TCP設定のソケットを使いAからBへsend関数でデータ送信、Bはrecvfromでデータを受信かつrecvfrom第五引数のデータを使いAのIPアドレスを取得。ということは可能でしょうか?

Aベストアンサー

一般的な回答として、そのようなことはできません。 (厳密な話しをすればパケットキャプチャーなどの技術を使えば可能ですが...)
そもそも、TCP/IPとUDP/IPではプロトコルが違います。 TCP/IPでは「接続」手順が必要で、この手順を無しにUDP/IPのように送信することはできません。
相手のIPアドレスを知りたいだけならTCP/IPでAからBへ「接続」した時点で、BはAのIPアドレスを知ることができます。

QMicrosoft Visual C++でのエラー「fatal error C1014: インクルード ファイルが多すぎます : 深さ = 1024」について

タイトルに書きましたが、Microsoft Visual C++で実行(?)した際に、エラーがある時は下の欄にいろいろ出てくると思いますが、先ほど「fatal error C1014: インクルード ファイルが多すぎます : 深さ = 1024」というエラーがでてきました。

絶対にあってるだろう簡単なプログラムでも毎回そうなってしまします。

どういうことなのでしょうか?

初心者なのですがよろしくお願いします。

Aベストアンサー

VC++6.0あたりまでですと、プリコンパイル済みヘッダーなんかが悪さして、まともにコンパイルできないって事は良くありました。
表記のエラーは記憶に無いですが。

試しにプリコンパイル済みヘッダーを使用しない設定にするとか、フルビルドをかけてみるとか。

815644 - C1010 エラーの情報: 最も多くの共通の原因
http://support.microsoft.com/kb/815644/ja


> #include <stdio.h>
> ~

> このコードでも同様のエラーなんです。

VC++だと、stdio.hを直接書き換えるなんて事も可能だったハズ。
間違って書き換えちゃったとかって事は?


あるいは、コンパイル時の設定で、#defineが無効になるような所をいじってしまったとか。

Qatlstr.hのインクルードによるエラーについて

atlstr.hのインクルードにより生じるエラーについて質問させて頂きます。

開発環境は、Visual Studio 2008 Professional Editionです。
(Visual Studio 2008におけるプログラミングは正直まだ慣れておりませんorz)

Visual Studio 2008製品内のVisual C++ 2008において、以下の操作を行いプログラムを
実行すると、コンパイルは通るのですが、プログラム実行後にエラー音が一度鳴るだけ
でフォームが表示されないというエラーが発生します。その際、タスクマネージャでプロセ
スを確認するとプログラム自体は動いているようで、”AtlStrTest.exe”というプロセスが実
行されているのが確認できます。


1.[ファイル]->[新規作成]->[プロジェクト]で新しいプロジェクトダイアログを表示させる
2.[Visual C++]->[CLR]->[Windows フォーム アプリケーション]を選択し、プロジェクト名
  ”AtlStrTest”でプロジェクトを新規作成
3.プロジェクト内に生成された”atdafx.h”の”// TODO: プログラムに必要な追加ヘッダー
  をここで参照してください。”というコメントの下に#include <atlstr.h>の一行を追加する


 原因を分析しようにも、ヘッダをインクルードしただけでエラーが起きるという状況がは
じめてなので、途方に暮れている状態です。

大変恐縮ですが、このatlstr.hのインクルードによるエラーがなぜ発生したのかについて、
どなたかアドバイスよろしくお願いいたします。


【関連情報】
 同様の操作を、Win32コンソールアプリケーションで実行したときは、このようなエラーは
出ませんでした

atlstr.hのインクルードにより生じるエラーについて質問させて頂きます。

開発環境は、Visual Studio 2008 Professional Editionです。
(Visual Studio 2008におけるプログラミングは正直まだ慣れておりませんorz)

Visual Studio 2008製品内のVisual C++ 2008において、以下の操作を行いプログラムを
実行すると、コンパイルは通るのですが、プログラム実行後にエラー音が一度鳴るだけ
でフォームが表示されないというエラーが発生します。その際、タスクマネージャでプロセ
スを確認するとプログラム自体は動...続きを読む

Aベストアンサー

これまでに書かれた内容から、多分同じであろうというプロジェクトを作って見ました。

結果は、
Debugでは
VS上でデバッグ開始/デバッグなしで開始/exeで実行のいずれでもエラーメッセージ(Debug Assertion Faild! この下のメッセージは内容が判りませんでした。存在しないディレクトリのdbgheap.cを示していましたので)を出して、中止を選んでもプロセスが残ったままでした。すべて中止にすればプロセスも終了しました。

Releaseでは
デバッグ開始でハンドルされていない例外のエラー、デバッグなしで開始/exeで実行のいずれでもForm1が表示されました。
右上の閉じるボタンで終了しました。

Visual Studio 2008 Professional Version 9.0.30729.1 SP です。

結果だけで、原因と解決法はわかりません。

QMFCのexeのプログラムを MFCのdllに書き換えたい

VC++6.0を使用しています

新規作成
MFC AppWizard(exe)
新規
OK
[ステップ1]
ダイアログベース
次へ
[ステップ2/4]
次へ
[ステップ3/4]
次へ
[ステップ4/4]
終了

で作られた、雛型のexeをそっくりMFCのDLLに書き換えたい
と考えています
exeで作られたアプリを他のユーザーがVB6.0からDLLとして呼び出したいので書き換えて欲しいと頼まれました

MFCのDLLも雛型は簡単に出来上がるのですが
以下の関数を独立したオブジェクトにして、VB6.0からDLLの関数VBFUNC1として呼び出したいのですが、VBから呼び出すと

AfxEnableControlContainer();でアサートで引っ掛かってしまいます

ダイアログを使用したMFCのEXEをDLLとして使う場合の、コーディングについてご指南ください

BOOL CAaaApp::VBFUNC1()
//BOOL CAaaApp::InitInstance()
{
  AfxEnableControlContainer();

#ifdef _AFXDLL
  Enable3dControls();
#else
  Enable3dControlsStatic();
#endif

  CAaaDlg dlg;
  m_pMainWnd = &dlg;
  int nResponse = dlg.DoModal();
  if (nResponse == IDOK)
  {
  }
  else if (nResponse == IDCANCEL)
  {
  }
  return FALSE;
}

VC++6.0を使用しています

新規作成
MFC AppWizard(exe)
新規
OK
[ステップ1]
ダイアログベース
次へ
[ステップ2/4]
次へ
[ステップ3/4]
次へ
[ステップ4/4]
終了

で作られた、雛型のexeをそっくりMFCのDLLに書き換えたい
と考えています
exeで作られたアプリを他のユーザーがVB6.0からDLLとして呼び出したいので書き換えて欲しいと頼まれました

MFCのDLLも雛型は簡単に出来上がるのですが
以下の関数を独立したオブジェクトにして、VB6.0からDLLの...続きを読む

Aベストアンサー

まず、DLLとEXEの違いについてわかっていますか?
DLLとは"他のEXEやDLLに対して機能を提供するもの"です。

単体では役に立たず、直接・間接にEXEから呼ばれて役に立つものです。

DLLを作成するには、DLLの役割を明確にしなければなりません。
通常、関数の形で提供することが多いですが、
クライアントがC++であれば、C++クラスを提供することも可能です。

この提供することを"エクスポート"と呼びます。
エクスポートするためには特別な指定が必要です。

詳細はこちらで参考になります
http://hp.vector.co.jp/authors/VA023539/tips/dll/001.htm

なお、VB6がクライアントの場合、DEFファイルも必要です。
http://www.geocities.jp/i_love_balard/myhome/vbdll.html

さらに, DLL側でメッセージ処理を行わせるには
いくつかの注意点があります。
http://msdn.microsoft.com/ja-jp/library/30c674tx.aspx

色々大変です。

ただ単にVBからVC++のアプリを呼び出したいなら
わざわざDLLにするよりも
Shell関数のほうが簡単だと思います。

http://hanatyan.sakura.ne.jp/vbhlp/tap_shell.htm

まず、DLLとEXEの違いについてわかっていますか?
DLLとは"他のEXEやDLLに対して機能を提供するもの"です。

単体では役に立たず、直接・間接にEXEから呼ばれて役に立つものです。

DLLを作成するには、DLLの役割を明確にしなければなりません。
通常、関数の形で提供することが多いですが、
クライアントがC++であれば、C++クラスを提供することも可能です。

この提供することを"エクスポート"と呼びます。
エクスポートするためには特別な指定が必要です。

詳細はこちらで参考になります
http://...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報