by kobo » 2008年11月22日(土) 19:47
konisi様 7様 いつもありがとうございます。
領域確保は一応+100とか余分に取ってみましたがダメでした。
グローバル変数は冒頭の
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
の直下でしています。
以下、コードを短いコードを載せます。
dim cd as string cd ="test" をconst cd="test"にすると動きました。
理由がわかりません。N88の知識ベースの私には同意義に見えるのですが・・
本チャンの長いコードの方は、お借りした方法でなんとか動きました。
ですが動く理由もさっぱりです。
もちろん cdをstringではなく、同じ場所でBytePtrで領域も確保して用意してもやっぱりエラーです。
dim cd as string cd ="test"> const cd="test"が原因なのでしょうか(?д?)
コード: 全て選択
'-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
DialogBox(0,"MainWnd")
dim cd as string
cd ="test"
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy()
booktest_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_CommandButton1_Click()
fp(gtdata())
End Sub
Function gtdata() as String
dim textA as BytePtr
dim textC as BytePtr
dim lenA as long
dim lenB as long
dim hEdit as HWND
hEdit=GetDlgItem(hMainWnd,EditBox1)
lenA=GetWindowTextLength(hEdit)
textA=calloc(lenA)
GetWindowText(hEdit,textA,lenA)
lenB=lstrlen(cd)
textC=calloc(lenA+lenB+1)
lstrcat(textC,textA)
lstrcat(textC,cd)
gtdata=textC
free(textA)
free(textC)
End Function
Sub fp(text as BytePtr) as byte
dim hEdit as HWND
dim length as long
hEdit=GetDlgItem(hMainWnd,EditBox3)
'テキスト データの長さを取得
length=GetWindowTextLength(hEdit)
'すべての部分を選択する
SendMessage(hEdit,EM_SETSEL,0,length)
SendMessage(GetDlgItem(hMainWnd,hEdit), WM_CUT, 0, 0)
SendMessage(hEdit, WM_SETTEXT, 0, text)
End Sub
konisi様 7様 いつもありがとうございます。
領域確保は一応+100とか余分に取ってみましたがダメでした。
グローバル変数は冒頭の
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
の直下でしています。
以下、コードを短いコードを載せます。
dim cd as string cd ="test" をconst cd="test"にすると動きました。
理由がわかりません。N88の知識ベースの私には同意義に見えるのですが・・
本チャンの長いコードの方は、お借りした方法でなんとか動きました。
ですが動く理由もさっぱりです。
もちろん cdをstringではなく、同じ場所でBytePtrで領域も確保して用意してもやっぱりエラーです。
dim cd as string cd ="test"> const cd="test"が原因なのでしょうか(?д?)
[code]
'-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
DialogBox(0,"MainWnd")
dim cd as string
cd ="test"
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy()
booktest_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_CommandButton1_Click()
fp(gtdata())
End Sub
Function gtdata() as String
dim textA as BytePtr
dim textC as BytePtr
dim lenA as long
dim lenB as long
dim hEdit as HWND
hEdit=GetDlgItem(hMainWnd,EditBox1)
lenA=GetWindowTextLength(hEdit)
textA=calloc(lenA)
GetWindowText(hEdit,textA,lenA)
lenB=lstrlen(cd)
textC=calloc(lenA+lenB+1)
lstrcat(textC,textA)
lstrcat(textC,cd)
gtdata=textC
free(textA)
free(textC)
End Function
Sub fp(text as BytePtr) as byte
dim hEdit as HWND
dim length as long
hEdit=GetDlgItem(hMainWnd,EditBox3)
'テキスト データの長さを取得
length=GetWindowTextLength(hEdit)
'すべての部分を選択する
SendMessage(hEdit,EM_SETSEL,0,length)
SendMessage(GetDlgItem(hMainWnd,hEdit), WM_CUT, 0, 0)
SendMessage(hEdit, WM_SETTEXT, 0, text)
End Sub[/code]