DOSのプログラムの移植の仕方

解決


みけにゃん  URL  2002-11-15 15:13:16  No: 50628  IP: [192.*.*.*]

何度もお世話になっているみけにゃんです。
今回はnMail.DLLと言うAPOP対応のSMTP/POP3メールDLLを使って
サーバにあるメールのリストを表示して選択したメールをエディットボックスに
表示する簡易メールリーダを作成中なのですが、その中で2点うまくいかない
部分があって今回はそのひとつを質問させていただきます。

現在nMail.DLLに入っているサンプルプログラム(いずれもPDS)の
Cのコンソールプログラムを上に書いたようなメールリーダにするため
私が最初から用意しているWin32 Application用に作ったウィンドウだけの
プログラムと猫でも分かるプログラミングのPOP3メールの件名を表示するの
リスト挿入部分を流用して作っているのですが、コンソールプログラムの
read_mailの関数を修正してコンパイルしようとしたのですが、以下の一箇所で
エラーが発生したためコンパイルでいないのですが、どうすれば直せるでしょうか?

void Read_Mail(SOCKET s, int no, int size, HWND hEdit)
{
  char subject[TEMP_MAX], date[TEMP_MAX], from[TEMP_MAX], header[TEMP_MAX];
  char test[TEMP_MAX];
  
  // メールのサイズ分確保して読み込む
  if((body = malloc(size + 1)) != NULL){←この文でエラー
    if(NMailPop3GetMail(s, no, subject, date, from, header, body, NULL, NULL) >= 0) {
      // 読み込んだヘッダ及び本文を表示
      wsprintf(test, "%s%s", header, body);
      MessageBox(NULL, test, "debug", MB_OK);
    }
    else{
      MessageBox(NULL, "error", "debug", MB_OK);
    }
    free(body);
  }
}

エラー内容:
c:\program files\microsoft visual studio\myprojects\fmail\fmail.cpp(279) : error C2440: '=' : 'void *' から 'char *' に変換することはできません。(新しい動作 ; ヘルプを参照)

編集 削除
 2002-11-15 15:46:17  No: 50629  IP: [192.*.*.*]

body が何者か(body の型が)不明なのですが一応エラーの内容から char * 
だと仮定して返事します

if ((body =(char *)malloc(size +1)) !=NULL)  {

ならどうでしょうか?
malloc() の戻り値の型を調べてみましょう

編集 削除
みけにゃん  URL  2002-11-15 15:48:22  No: 50630  IP: [192.*.*.*]

えっとbodyの型の定義はchar *body;です。

編集 削除
みけにゃん  URL  2002-11-15 16:00:26  No: 50631  IP: [192.*.*.*]

島さんありがとうございます。
上のコードに変更したらちゃんとエディットボックスに
メールの内容を取り込む事が出来ました。
まだもうひとつ内容があるのでそれは別のレスにします。

編集 削除