ActiveBasic リソースの追加/読み込み
ActiveBasic 4.23.00 を使用しています。
今回、ファイルの暗号化ソフトを作成しようと思い、手段を考えていたところ、ON ERROR RESUME NEXT様のリソースの追加/読み込みの項目を見つけ、
これでやってみようと作成を始めました。
Declare Function BeginUpdateResource Lib "kernel32" Alias "BeginUpdateResourceA" (pFileName As BytePtr,bDeleteExistingResources As Long) As Long
Declare Function UpdateResource Lib "kernel32" Alias "UpdateResourceA" (hUpdate As Long,lpType As BytePtr,lpName As BytePtr,wLanguage As Long,lpData As VoidPtr,cbData As Long) As Long
Declare Function EndUpdateResource Lib "kernel32" Alias "EndUpdateResourceA" (hUpdate As Long,fDiscard As Long) As Long
'定数
Const RT_MANIFESTID=1
Const RT_MANIFEST="BINTYPE"
Sub MainWnd_CommandButton1_Click()
Dim IsUpdate As Long
Dim Update As Long
Dim temp As String
'EditBoxをチェック
Dim Ed1 As Long
Dim Ed2 As Long
Dim buf1 As BytePtr
Dim buf2 As BytePtr
Ed1=GetWindowTextLength(GetDlgItem(hMainWnd,EditBox1))
Ed2=GetWindowTextLength(GetDlgItem(hMainWnd,EditBox2))
If Ed1=0 Then
MessageBox(hMainWnd,"埋め込み用物質が選択されていません","Error 1",MB_OK or MB_ICONHAND)
Exit Sub
End If
If Ed2=0 Then
MessageBox(hMainWnd,"埋め込み先物質が選択されていません","Error 2",MB_OK or MB_ICONHAND)
Exit Sub
End If
buf1=malloc(Ed1+1)
buf2=malloc(Ed2+1)
GetDlgItemText(hMainWnd,EditBox1,buf1,Ed1)
GetDlgItemText(hMainWnd,EditBox2,buf2,Ed2)
temp=MakeStr(buf2)
IsUpdate=BeginUpdateResource(buf1,TRUE)'FileName はターゲットファイルのフルパス。Ex:"C:\test.exe" にリソースを埋め込む場合、FileName="C:\test.exe"
If IsUpdate=0 Then'エラー
free(buf1)
free(buf2)
MessageBox(hMainWnd,"リソースの埋め込み先に異常あり","Error 3",MB_OK or MB_ICONHAND)
Exit Sub
EndIf
Update=UpdateResource(IsUpdate,RT_MANIFEST,RT_MANIFESTID,MAKELANGID(LANG_JAPANESE,SUBLANG_SYS_DEFAULT),temp,Len(temp))
If Update=0 Then'エラー
EndUpdateResource(IsUpdate,TRUE)
free(buf1)
free(buf2)
MessageBox(hMainWnd,"リソースの埋め込み時に異常事態発生","Error 4",MB_OK or MB_ICONHAND)
Exit Sub
End If
EndUpdateResource(IsUpdate,FALSE)
free(buf1)
free(buf2)
MessageBox(hMainWnd,"たぶんエラーなく書き込みを完了しました。","Success!!",MB_OK or MB_ICONINFORMATION)
End Sub
このように書いてみたのですが、IsUpdate=0でいつもエラーが返ってきます。
何故かが分かりません。
すみませんが、ご存知の方がいらっしゃいましたら、ご教授の方をお願いします。
補足
ご回答、ありがとうございます。 助かりました。 後、 'EditBoxの内容を取得 Dim Buffer As BytePtr Dim Length As Long Length = GetWindowTextLength(GetDlgItem(hMainWnd,EditBox1)) Buffer = calloc(Length+1) GetWindowText(GetDlgItem(hMainWnd,EditBox1),Buffer,Length+1) SaishoKazu=Val(Buffer) Length = GetWindowTextLength(GetDlgItem(hMainWnd,EditBox3)) Buffer = calloc(Length+1) GetWindowText(GetDlgItem(hMainWnd,EditBox3),Buffer,Length+1) AtoKazu=Val(Buffer) free(Buffer) '計算処理 If Kigo="+" Then Ans=SaishoKazu+AtoKazu End If SetDlgItemText(hMainWnd,EditBox4,Ans) と記述してみたのですが、上手いことEditBox4に文字が表示されません。 SaishoKazu AtoKazu Ansはそれぞれグローバル変数部分にDouble型で定義しています。 もし分かりましたら、ご教授願いたいのですが