未知の文字列を開放しようとしました?。

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
Uhsp

未知の文字列を開放しようとしました?。

#1 投稿記事 by Uhsp »

 下記の構造体で[pszText as STRING]と定義すると機能上は問題ないの
ですが、
”未知の文字列を開放しようとしました”とメッセージ?が出てしまい
エラー行が特定出来ないので原因にたどり着くのに手間取りました。

他の構造体に習って[pszText as BytePtr]とし解決できましたが、
Dim で定義してあるだけでメッセージが発生するので何が問題なのか
解りません、どなたか教えていただけませんか?。

コード: 全て選択


 Type TCITEM
      mask         as  LONG
      dwState      as  LONG
      dwStateMask  as  LONG
      pszText      as  BytePtr
'     pszText      as  STRING
      cchTextMax   as  LONG
      iImage       as  LONG
      lParam       as  LONG
 End Type
マティ
記事: 161
登録日時: 2005年8月23日(火) 00:15
お住まい: 沖縄県
連絡する:

#2 投稿記事 by マティ »

lstrcpy関数で文字列を連結していませんか?
lstrcpy関数をString型で使用する必要がある場合は、ZeroString関数で事前に(必要とする領域分)バッファーを確保して下さい。
Uhsp

#3 投稿記事 by Uhsp »

> lstrcpy関数で文字列を連結していませんか?
> lstrcpy関数をString型で使用する必要がある場合は、
> ZeroString関数で事前に(必要とする領域分)バッファーを確保して下さい。

ご返信ありがとうございます。
lstr~関係の命令は私の場合、色々問題があったので使用していません
しかしAPIの関係で(EM_GETLINEなど先頭にサイズが必要な場合)は
Dim xx[1024] as Byteを使用しておりますがこの場合は使用していません。
(Dim ss as string :ss=ZeroString(1024)も使用していますがlstr~は無い)

dim zz TCITEM をコメントアウトすることで解決しますし、
コノ部分を実行していなくてもメッセージが出てしまうので不思議です。

現状は pszText as BytePtr でメッセージは出ないのですが下記のコード
は使用法がまちがってますでしょうか。

コード: 全て選択


 Dim Bu       as STRING
 Dim Bx[1024] as BYTE
 Bu  =   ZeroString(1024)

 SetWord(Bx,1024)
 SendMessage(.hoHnd,SW,N1,Bx as LONG)
 Bu  = Bx 'この部分?
マティ
記事: 161
登録日時: 2005年8月23日(火) 00:15
お住まい: 沖縄県
連絡する:

#4 投稿記事 by マティ »

Uhsp さんが書きました:Bu = Bx 'この部分?
文字列Byte型のデータを代入する際は、MakeStr関数を使用します。

コード: 全て選択

Bu=MakeStr(Bx)
多分これで直ると思います。
Uhsp

#5 投稿記事 by Uhsp »

>
Uhsp さんが書きました:Bu = Bx 'この部分?
> 文字列Byte型のデータを代入する際は、MakeStr関数を使用します。
>

コード: 全て選択

Bu=MakeStr(Bx)
> 多分これで直ると思います。

ありがとうございます。
この部分は現状エラーにならないのですが修正してみます。
(もしかしたらcommand.sbpでエラーがでていたかもしれません)
返信する