by hira » 2005年7月08日(金) 19:49
少し面倒かもしれませんが、リソースを追加するプログラムを別に作成しておき、元のプログラムではリソースを読み込むようにしてはいかがでしょうか。
<例>
Oar32.dllへのリソース追加で使用しているコードをそのまま掲載してみます。参考にしてください。
コード: 全て選択
Declare Function FindResource Lib "kernel32" Alias "FindResourceA" (hInstance As HINSTANCE,lpName As BytePtr,lpType As BytePtr) As HANDLE
Declare Function BeginUpdateResource Lib "kernel32" Alias "BeginUpdateResourceA" (pFileName As BytePtr,bDeleteExistingResources As Long) As Long
Declare Function UpdateResource Lib "kernel32" Alias "UpdateResourceA" (hUpdate As DWord,lpType As BytePtr,lpName As BytePtr,wLanguage As DWord,lpData As VoidPtr,cbData As Long) As Long
Declare Function EndUpdateResource Lib "kernel32" Alias "EndUpdateResourceA" (hUpdate As DWord,fDiscard As Long) As Long
Dim hUpdateFile As DWord
Dim hRsrc[1] As DWord
Dim strExePath As String
Dim Buf As String
Dim i As DWord,FormatedNum As String
Const SFXCount=2
strExePath="..\..\oar32.dll"
hUpdateFile=BeginUpdateResource(strExePath,FALSE)
If hUpdateFile Then
For i=1 To SFXCount
FormatedNum=ZeroString(2)
wsprintf(FormatedNum,"%02d",i)
Open FormatedNum & ".bin" For Input As 1
Field #1,Lof(1)
Get #1,1,Buf
UpdateResource(hUpdateFile,"SFX",i,MAKELANGID(&H11,&H2),Buf,Lof(1))
Close 1
Next
EndUpdateResource(hUpdateFile,0)
End If
次は、読み込む方のコードです。こちらを元のプログラムに記述してください。
コード: 全て選択
Declare Function FindResource Lib "kernel32" Alias "FindResourceA" (hInstance As HINSTANCE,lpName As BytePtr,lpType As BytePtr) As HANDLE
Declare Function LoadResource Lib "kernel32" (hModule As HANDLE,hResInfo As HANDLE) As HGLOBAL
Declare Function FreeResource Lib "kernel32" (hResData As HGLOBAL) As DWord
Declare Function LockResource Lib "kernel32" (hResData As HGLOBAL) As VoidPtr
Declare Function SizeofResource Lib "kernel32" (hModule As HANDLE,hResInfo As HANDLE) As DWord
(変数の宣言などは省略)
Ret=FindResource(hDLL,dwSFXType+1,"SFX")
Ret2=SizeofResource(hDLL,Ret)
Ret=LoadResource(hDLL,Ret)
pSFXRes=LockResource(Ret)
WriteFile(hFile2,pSFXRes,Ret2,VarPtr(Dummy),ByVal NULL) 'SFX部分
Buffer=ZeroString(&H100000)
Do
ReadFile(hFile,Buffer,&H100000,VarPtr(Ret2),ByVal NULL)
WriteFile(hFile2,Buffer,Ret2,VarPtr(Dummy),ByVal NULL)
Loop While Ret=&H100000
FreeResource(Ret)
要点だけを記述したので少々わかりにくいかもしれませんが、何とか解読してください(汗
少し面倒かもしれませんが、リソースを追加するプログラムを別に作成しておき、元のプログラムではリソースを読み込むようにしてはいかがでしょうか。
<例>
Oar32.dllへのリソース追加で使用しているコードをそのまま掲載してみます。参考にしてください。
[code]Declare Function FindResource Lib "kernel32" Alias "FindResourceA" (hInstance As HINSTANCE,lpName As BytePtr,lpType As BytePtr) As HANDLE
Declare Function BeginUpdateResource Lib "kernel32" Alias "BeginUpdateResourceA" (pFileName As BytePtr,bDeleteExistingResources As Long) As Long
Declare Function UpdateResource Lib "kernel32" Alias "UpdateResourceA" (hUpdate As DWord,lpType As BytePtr,lpName As BytePtr,wLanguage As DWord,lpData As VoidPtr,cbData As Long) As Long
Declare Function EndUpdateResource Lib "kernel32" Alias "EndUpdateResourceA" (hUpdate As DWord,fDiscard As Long) As Long
Dim hUpdateFile As DWord
Dim hRsrc[1] As DWord
Dim strExePath As String
Dim Buf As String
Dim i As DWord,FormatedNum As String
Const SFXCount=2
strExePath="..\..\oar32.dll"
hUpdateFile=BeginUpdateResource(strExePath,FALSE)
If hUpdateFile Then
For i=1 To SFXCount
FormatedNum=ZeroString(2)
wsprintf(FormatedNum,"%02d",i)
Open FormatedNum & ".bin" For Input As 1
Field #1,Lof(1)
Get #1,1,Buf
UpdateResource(hUpdateFile,"SFX",i,MAKELANGID(&H11,&H2),Buf,Lof(1))
Close 1
Next
EndUpdateResource(hUpdateFile,0)
End If[/code]
次は、読み込む方のコードです。こちらを元のプログラムに記述してください。
[code]Declare Function FindResource Lib "kernel32" Alias "FindResourceA" (hInstance As HINSTANCE,lpName As BytePtr,lpType As BytePtr) As HANDLE
Declare Function LoadResource Lib "kernel32" (hModule As HANDLE,hResInfo As HANDLE) As HGLOBAL
Declare Function FreeResource Lib "kernel32" (hResData As HGLOBAL) As DWord
Declare Function LockResource Lib "kernel32" (hResData As HGLOBAL) As VoidPtr
Declare Function SizeofResource Lib "kernel32" (hModule As HANDLE,hResInfo As HANDLE) As DWord
(変数の宣言などは省略)
Ret=FindResource(hDLL,dwSFXType+1,"SFX")
Ret2=SizeofResource(hDLL,Ret)
Ret=LoadResource(hDLL,Ret)
pSFXRes=LockResource(Ret)
WriteFile(hFile2,pSFXRes,Ret2,VarPtr(Dummy),ByVal NULL) 'SFX部分
Buffer=ZeroString(&H100000)
Do
ReadFile(hFile,Buffer,&H100000,VarPtr(Ret2),ByVal NULL)
WriteFile(hFile2,Buffer,Ret2,VarPtr(Dummy),ByVal NULL)
Loop While Ret=&H100000
FreeResource(Ret)[/code]
要点だけを記述したので少々わかりにくいかもしれませんが、何とか解読してください(汗