DLLを呼び出すとエラーが表示される。 – プログラミング – Home

DLLを呼び出すとエラーが表示される。
 
通知
すべてクリア

DLLを呼び出すとエラーが表示される。


SA
 SA
(@SA)
ゲスト
結合: 22年前
投稿: 17
Topic starter  

はじめまして。DLLについてお聞きしたいことがあります。

【構成】
呼び出し元.exe (WinXP, VC++6.0 コンソールアプリ(MFCを使用)で作成)
作成したDLL

【現象】
このDLL関数を呼び出し元.exeから呼び出すとデバック環境で、
以下のようなエラーが出てしまう。

Debug Assertion Failed!
File:dbgheap.c
Line:1044

Expression:_CrtIsValidHeapPointer( pUserData )

【DLLについて】
MFC AppWizard(dll) MFCのスタティックライブラリを使用。
以下DLLのソースです。(エラー処理など一部省略しています。)

extern C __declspec(dllexport) BOOL FTPPutFile(
CString sIpAddr, // サーバのアドレス
CString sUsr, // サーバにログイン
するユーザ名
CString sPasswd, // サーバにログイン
するパスワード。
CString sLocalFile,// 送信するファイ
ルパス。
CString sRemoteFile,// 送信先のリモー
トファイルパス。
DWORD FtpMode // 転送モード。
)
{
CString s;

// FTP接続。
CInternetSession intesession
(NULL,0,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,INTERNET_FLAG_RELOAD |
INTERNET_FLAG_DONTCACHE ) ;
CFtpConnection* pFtpConnection;

TRY
{
pFtpConnection = intesession.GetFtpConnection( sIpAddr, sUsr, sPasswd,
INTERNET_DEFAULT_FTP_PORT , FALSE ) ;
}
CATCH( CInternetException , e )
{
e->GetErrorMessage( s.GetBuffer( 1024 ), 1024, NULL ) ;
s.ReleaseBuffer( -1 );
e->Delete() ;
return FALSE ;
}
END_CATCH ;

// ファイル送信。
pFtpConnection->PutFile( sLocalFile, sRemoteFile, FtpMode, 1 ) ;

// FTP切断。
pFtpConnection->Close() ;
intesession.Close() ;
}
このようなエラーが出てしまう原因としてどのようなものがあるのでしょうか?
お手数ですが、なにかヒント等教えていただけたら幸いです。


引用解決済
トピックタグ
RAS
 RAS
(@RAS)
ゲスト
結合: 22年前
投稿: 2
 

実際に

>File:dbgheap.c
>Line:1044

の部分を見ればわかりますが、無効な領域を開放しようとしています。
多分 e->Delete が原因かも。
MFCマクロのTRY~CATCHではDelete呼び出しは不要です。

あと引数にCString使ってますけど
EXE側とDLL側でCStringの実装が同じでないと(MFCバージョンが違うと)
不具合が起きる可能性があります。


返信引用
SA
 SA
(@SA)
ゲスト
結合: 22年前
投稿: 17
Topic starter  

>多分 e->Delete が原因かも。
>MFCマクロのTRY~CATCHではDelete呼び出しは不要です。

e->Deleteの部分を削除してもダメでした。

>あと引数にCString使ってますけど
>EXE側とDLL側でCStringの実装が同じでないと(MFCバージョンが違うと)
>不具合が起きる可能性があります。

CString型をCHAR*型にして試してみたのですが、
こちらは成功しました。
MFCのバージョンが異なっているのかもしれませんね。

ありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました