こんばんは。
とりあえず気づいた点だけを書いておきます。無愛想ですみません。
コード: 全て選択
Dim MemoryF As Byte
Select Case MemoryF
MemoryFは関数内の変数ですから,MainWnd_CommandButton1_Clickを抜ける度にその内容は破棄されます。
そのため,これでは常にCase 0へ行ってしまいます。
もっともreallocは(freeしないまま)確保するメモリの量を変えるためにあるので,
このコードのように終わりで毎回freeするのであれば,reallocを使う必要はありません。
つまりMemoryFで場合分けする必要も無いと思います。
コード: 全て選択
EditStr=malloc(SendMessage(hEdit,WM_GETTEXTLENGTH +1,0,0))
たぶんこれがfreeでだめになる根本の原因だと思います。
EditStr = malloc(SendMessage(hEdit,WM_GETTEXTLENGTH,0,0) + 1)ではないでしょうか。
ちなみに自プログラムのウィンドウですから,WM_GETTEXTLENGTHだけでなくGetWindowTextLengthを使う方法もあります。
その方がこんな間違いをせずにすむでしょう。
コード: 全て選択
realloc(EditStr,SendMessage(hEdit,WM_GETTEXTLENGTH +1,0,0))
もし本当にreallocを使うときにはEditStr = realloc(EditStr, ...);とする必要があります。忘れやすいので,なかなか嵌ります。
コード: 全て選択
GetWindowText(hEdit,EditStr,SendMessage(hEdit,WM_GETTEXTLENGTH,0,0) +1)
蛇足ながら,どうせまたここでも文字数を得る必要がありますから,私ならWM_GETTEXTLENGTHが返した値を変数に保存しておきます。