WindowsXP+VC6環境にて作業しています。
クラスライブラリを作成するため、AppWizardにて「MFC AppWizard (dll)」を選択してプ
ロジェクトを作成し、その中にクラスを1つ作成してビルドを行ったところ、次のような
エラーが表示されました。
############################
--------------------構成: dllNetRW - Win32 Debug--------------------
コンパイル中...
NetRW.cpp
D:\MakeDLL\dllNetRW\NetRW.cpp(11) : error C2628: 'CNetRW' と 'char' の記述が不
正です (';' で区切られていない可能性があります)。
D:\MakeDLL\dllNetRW\NetRW.cpp(11) : error C2538: new : 配列に対し初期化子が与え
られています。
cl.exe の実行エラー
dllNetRW.dll - エラー 2、警告 0
#############################
上記エラー部分として指摘されている11行目は、クラスウィザードにより自動的に生成
されたものであり、当方の知識不足のため全く理解することができないため、エラーの
原因についてお知恵をお貸しいただけないでしょうか。
よろしくお願いいたします。
長文のため大変恐縮ですが、以下にエラーで指摘されているCPPファイルをコピペさせて
いただきます。
// NetRW.cpp: CNetRW クラスのインプリメンテーション
//
//////////////////////////////////////////////////////////////////////
#include stdafx.h
#include NetRW.h
#include <afxinet.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// 構築/消滅
//////////////////////////////////////////////////////////////////////
CNetRW::CNetRW()
{
}
CNetRW::~CNetRW()
{
}
CFtpConnection* CNetRW::fConnection(CString strServer, CString strID, CString
strPassWord)
{
ptrFtpConnect = objIS.GetFtpConnection(strServer, strID, strPassWord);
}
bool CNetRW::fClose(CFtpConnection*)
{
ptrFtpConnect->Close();
objIS.Close();
delete ptrFtpConnect;
delete objIS;
}
長文過ぎるため記述が途中までしか入らなかったため、大変申し訳ありませんが、続き
を以下に記述させていただきます。
CString CNetRW::fRead(CString strFileName)
{
CInternetFile* ptrItFile;
ptrItFile = ptrFtpConnect->OpenFile(strFileName, GENERIC_READ,
FTP_TRANSFER_TYPE_ASCII);
if (ptrItFile){
// ファイル読み取り用バッファを用意
char chrTemp[1024];
UINT uintCheck;
CString strRead;
// 終端に達するまで読み取る
while(true)
{
uintCheck = ptrItFile->Read(chrTemp, 1024);
CString strTemp((LPCTSTR)chrTemp, uintCheck);
strRead += strTemp;
if (uintCheck < 1024) break;
}
ptrItFile->Close();
delete ptrItFile;
return strRead;
}
}
bool CNetRW::fWrite(CString strFileName, CString strData)
{
CInternetFile* ptrItFile;
ptrItFile = ptrFtpConnect->OpenFile(strFileName, GENERIC_WRITE,
FTP_TRANSFER_TYPE_ASCII);
ptrItFile->Write(strData, strData.GetLength());
ptrItFile->Close();
delete ptrItFile;
return true;
}
長文って・・・。ソースコード全部貼り付けて・・・
ご自分のデバッグ作業を、他人にブン投げてないか?
問題の11行目ってどこよ?。これじゃワカランわ。
newがドウコウ言ってるから#define new DEBUG_NEWあたり
としてアドバイスすると、#include <afxinet.h>の
位置が悪いだけじゃマイカ?
一つ考えられるのは公開されていないNetRW.hの記述が拙くて
インクルードした結果、その後の記述に影響をしているのではないかと言う話。
インクルードはあくまでも元のソースに指定されたファイルの中身を取り込んで
一本のファイルであるかのように扱う為の手段なのでヘッダ側の記述ミスは
そのまま展開後のソースに影響を与えます。
提示されている内容で想像できるのはこの程度です。
正直な話、質問している側がある程度わかっていないと質問すること自体が
難しいのでなんだかんだ言っても質問側がまったくわかりませんでは、
会話すら成立しない可能性があるので質問する側の相応の努力が必要になります。
#include <afxinet.h>は西山さん追加したんですよね。
二さんのご意見どおり
#include <afxinet.h>を追加した位置に問題があるのではないでしょうか。
afxinet.hを使ったサンプルリストを見るのも一つのてです。
googleで検索すればいろいろでてくるよ。