掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
record文の指定について (ID:31972)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
以前メールの送信でご教授いただいた中に(BSMTP.DLL)受信のサンプルもあったので利用したところ実行時メモリーエラーが発生します。 元はC言語で記述されているのでわかりません。たぶんわたしのRecoed文の指定が悪いと思います。どなたかRecoed文につ教えて下さい C言語のサンプルです。 struct RetArray { int counter; char* array[256]; }; extern "C" __declspec(dllimport) void BFreeArray(RetArray* parray); extern "C" __declspec(dllimport) int BPOP3( LPCSTR szServer, // pop3 server name LPCSTR szName, // NAME LPCSTR szPass, // PASSWORD LPCSTR szCommand,// COMMAND LPCSTR szPath, // directory RetArray* RetArray, // return ARRAY LIST LPSTR msg // 80 bytes length message area ); char msgx[80]; RetArray ret1,ret2; int rc = BPOP3( "server1","user1","pass1", "save 1","c:\\mail",&ret1,msgx); if (rc <= 0) return false; rc = BMIME("get",ret1.array[0],"c:\\mail",&ret2,msgx); if (rc > 0) { FILE *fp = ::fopen("c:\\mail\\mail.txt","wb"); for (int i= 0;i < rc ;i++) { ::fwrite(ret2.array[i],1,strlen(ret2.array[i]),fp); ::fwrite("\015\012",1,2,fp); // put CRLF } ::fclose(fp); } DeleteFile(ret1.array[0]); わたしがDelphiサンプルを参考に作成したものです。 interface uses Windows; type TBSMTPStatus = record Counter: integer; Status : array[0..255] of LPSTR; end; TPBSMTPStatus = ^TBSMTPStatus; Const Bsmtp = 'Bsmtp.DLL'; var Form1: TForm1; function BPOP3(szServer, // pop3 server name szName, // NAME szPass, // PASSWORD szCommand, // COMMAND szPath :LPCSTR; // directory Status :TPBSMTPStatus; // return ARRAY LIST msg :LPSTR // 80 bytes length message area ):Integer; cdecl external Bsmtp; implementation procedure TForm1.Button1Click(Sender: TObject); Const SV_NAM := 'サーバー名'; ML_NAM := 'ユーザー名'; PASSW = 'パスワード'; STATw = 'SAVEALL'; // 読込区分 全件読込 passs = 'メール保存場所\'; var Sspa : String; wkstr : array[0..80]of Char; F_NAM : String; Sih_Da : String; LL,MM,NN,PP,QQ,RR,SS: Integer; Kou_Na: array[0..70] of string; // ファイル名称 TPBSMTPStatusT : TPBSMTPStatus; // ←←←← ここにわたしが追加しました begin Mess.Caption := '[メール読込処理中...]'; Form1.Repaint; // メールの読込 LL := BPOP3(PChar(SV_NAM), // pop3 server name PChar(ML_NAM), // NAME PChar(PASSW), // PASSWORD PChar(STATw), // COMMAND PChar(passs), // directory TPBSMTPStatusT, // return ARRAY LIST wkstr); // 80 bytes length message area if LL >= 1 Then begin // メールの取り出し MM := TPBSMTPStatusT.Counter - 1; // ←←←← エラーがこの箇所で発生 // ↓↓↓↓↓↓↓↓↓↓↓↓↓ 以下の分をコメントにするとエラーがでない for PP := 0 to MM do begin Sspa := TPBSMTPStatusT.Status[PP]; LL := Length(Sspa); // ファイル名称のサイズ for QQ := 1 to LL do begin // 読込ファイル名取り出し if Copy(Sspa,QQ,2) = '\\' then begin // \\の文字 Kou_Na[PP] := Copy(Sspa,QQ+2,LL); // 読込ファイル名 break; end; end; この中に処理文を追加しようと思っています。 end; // ↑↑↑↑↑↑↑↑↑↑↑↑↑ 以上の分をコメントにするとエラーがでない end else begin Showmessage(wkstr); end; end; end. 長くてすみませんが上記の文でfor文の箇所をコメントにするとメモリーエラーは発生しません。 DLLが悪いとはおもえません。 よろしくおねがいします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.