by yu0627 » 2006年4月04日(火) 21:06
たぶん書いてないと思うんですけど、DLL側でlstrcpy(lpString1,lpString2+"hoge")なんてコードを実行してませんか?
書いてないとは思うんですけどね。
それはしていません。
DLL側のソースが明らかになっていないとyu0627さんが解決するしかないと思います。
とりあえず、MakeLogFile()とOpenLogFile()関数が引っかかるのでその辺りの処理がアクセス違反してないか調べてみてください。
ひとつおかしいのが、インクルードするとうまくいくのに、DLLから呼び出すとおかしく
なることです。とりやえず、該当部分だけソースを公開します。
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
'グローバル変数
Dim lpszUsingSoftName As BytePtr 'DLLを使用するソフト名
Dim lpszUsingSoftAutherName As BytePtr 'DLLを使用するソフトの作者名
Dim hwndOwner As HWND '親ウインドウハンドル
Dim lpstrLogFileName[MAX_PATH] As Byte 'ログファイルのパス
Dim hFile As HFILE 'ログファイルのハンドル
Dim lpszLogBuffer As BytePtr 'ログファイルのバッファ
Dim dwSecureBufferSize As DWord '確保したバッファのサイズ
lpszLogBuffer=malloc(10^9*1)
dwSecureBufferSize=10^9*1
---略---
'ログファイル生成
Function Export MakeLogFile(lpszLogFilePath As BytePtr, cHRChar As *Char, nHRNum As Long) As Long
Dim i As Long
lstrcpy(lpstrLogFileName, lpszLogFilePath)
'ログファイルをオープン
hFile=CreateFile(lpstrLogFileName, GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,
ByVal 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
If hFile=INVALID_HANDLE_VALUE Then
MessageBox(hwndOwner, "ログファイルハンドルの作成に失敗",
"Error - AddLogFunction", MB_OK or MB_ICONSTOP)
hFile=0
MakeLogFile=0
Exit Function
End If
wsprintf(lpszLogBuffer, Ex"%s LogFile\r\nCopyRight(C) %s, All Rights Reseved.\r\n\r\nLogFile Made By AddLogFunction\r\nCopyRight(C) yu0627, All Rights Reseved.\r\n",
lpszUsingSoftName, lpszUsingSoftAutherName)
i=1
For i=1 To nHRNum
lstrcat(lpszLogBuffer, cHRChar)
Next
lstrcat(lpszLogBuffer, Ex"\r\n")
MakeLogFile=1
End Function
Function Export OpenLogFile(lpszLogFilePath As BytePtr, cHRChar As *Char, nHRNum As Long) As Long
Dim dwFileSize As DWord 'ファイルサイズ
Dim dwAccessByte As DWord 'アクセスサイズ
Dim i As Long 'フラグ
lstrcpy(lpstrLogFileName, lpszLogFilePath)
'ログファイルをオープン
hFile=CreateFile(lpstrLogFileName, GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, ByVal 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
If hFile=INVALID_HANDLE_VALUE Then
MessageBox(hwndOwner, "ログファイルのオープンに失敗", "Error - AddLogFunction", MB_OK or MB_ICONSTOP)
hFile=0
OpenLogFile=FALSE
Exit Function
End If
'ログファイルのバイト数を取得し、バッファを確保する
dwFileSize=GetFileSize(hFile, 0)
If dwFileSize>=dwSecureBufferSize Then
lpszLogBuffer=realloc(lpszLogBuffer, lstrlen(lpszLogBuffer)+10^9*1)
dwSecureBufferSize=lstrlen(lpszLogBuffer)+10^9*1
End If
'ログファイルの内容を読み込み、前のログとの区切り線を入れる
ReadFile(hFile, lpszLogBuffer, dwFileSize, VarPtr(dwAccessByte), ByVal 0)
i=1
For i=1 To nHRNum
lstrcat(lpszLogBuffer, cHRChar)
Next
lstrcat(lpszLogBuffer, Ex"\r\n")
'ファイルハンドルを開きなおす
CloseHandle(hFile)
hFile=CreateFile(lpstrLogFileName, GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, ByVal 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
OpenLogFile=1
End Function
バッファも10^9Byte=1MB取っていますので、OKなはずです。
DLLのデバッグもうまくいかない状態ですので、「?」です。
[quote]たぶん書いてないと思うんですけど、DLL側でlstrcpy(lpString1,lpString2+"hoge")なんてコードを実行してませんか?
書いてないとは思うんですけどね。[/quote] それはしていません。
[quote]DLL側のソースが明らかになっていないとyu0627さんが解決するしかないと思います。
とりあえず、MakeLogFile()とOpenLogFile()関数が引っかかるのでその辺りの処理がアクセス違反してないか調べてみてください。[/quote] ひとつおかしいのが、インクルードするとうまくいくのに、DLLから呼び出すとおかしく
なることです。とりやえず、該当部分だけソースを公開します。
[hide][code]'グローバル変数
Dim lpszUsingSoftName As BytePtr 'DLLを使用するソフト名
Dim lpszUsingSoftAutherName As BytePtr 'DLLを使用するソフトの作者名
Dim hwndOwner As HWND '親ウインドウハンドル
Dim lpstrLogFileName[MAX_PATH] As Byte 'ログファイルのパス
Dim hFile As HFILE 'ログファイルのハンドル
Dim lpszLogBuffer As BytePtr 'ログファイルのバッファ
Dim dwSecureBufferSize As DWord '確保したバッファのサイズ
lpszLogBuffer=malloc(10^9*1)
dwSecureBufferSize=10^9*1
---略---
'ログファイル生成
Function Export MakeLogFile(lpszLogFilePath As BytePtr, cHRChar As *Char, nHRNum As Long) As Long
Dim i As Long
lstrcpy(lpstrLogFileName, lpszLogFilePath)
'ログファイルをオープン
hFile=CreateFile(lpstrLogFileName, GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,
ByVal 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
If hFile=INVALID_HANDLE_VALUE Then
MessageBox(hwndOwner, "ログファイルハンドルの作成に失敗",
"Error - AddLogFunction", MB_OK or MB_ICONSTOP)
hFile=0
MakeLogFile=0
Exit Function
End If
wsprintf(lpszLogBuffer, Ex"%s LogFile\r\nCopyRight(C) %s, All Rights Reseved.\r\n\r\nLogFile Made By AddLogFunction\r\nCopyRight(C) yu0627, All Rights Reseved.\r\n",
lpszUsingSoftName, lpszUsingSoftAutherName)
i=1
For i=1 To nHRNum
lstrcat(lpszLogBuffer, cHRChar)
Next
lstrcat(lpszLogBuffer, Ex"\r\n")
MakeLogFile=1
End Function
Function Export OpenLogFile(lpszLogFilePath As BytePtr, cHRChar As *Char, nHRNum As Long) As Long
Dim dwFileSize As DWord 'ファイルサイズ
Dim dwAccessByte As DWord 'アクセスサイズ
Dim i As Long 'フラグ
lstrcpy(lpstrLogFileName, lpszLogFilePath)
'ログファイルをオープン
hFile=CreateFile(lpstrLogFileName, GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, ByVal 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
If hFile=INVALID_HANDLE_VALUE Then
MessageBox(hwndOwner, "ログファイルのオープンに失敗", "Error - AddLogFunction", MB_OK or MB_ICONSTOP)
hFile=0
OpenLogFile=FALSE
Exit Function
End If
'ログファイルのバイト数を取得し、バッファを確保する
dwFileSize=GetFileSize(hFile, 0)
If dwFileSize>=dwSecureBufferSize Then
lpszLogBuffer=realloc(lpszLogBuffer, lstrlen(lpszLogBuffer)+10^9*1)
dwSecureBufferSize=lstrlen(lpszLogBuffer)+10^9*1
End If
'ログファイルの内容を読み込み、前のログとの区切り線を入れる
ReadFile(hFile, lpszLogBuffer, dwFileSize, VarPtr(dwAccessByte), ByVal 0)
i=1
For i=1 To nHRNum
lstrcat(lpszLogBuffer, cHRChar)
Next
lstrcat(lpszLogBuffer, Ex"\r\n")
'ファイルハンドルを開きなおす
CloseHandle(hFile)
hFile=CreateFile(lpstrLogFileName, GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, ByVal 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
OpenLogFile=1
End Function[/code][/hide]
バッファも10^9Byte=1MB取っていますので、OKなはずです。
DLLのデバッグもうまくいかない状態ですので、「?」です。