3に関するサンプルはありますか?
受け取る側の関数で変換しているか、関数を宣言する際に型を指定してない限り、型は変換されません。その関数が文字列に変換しているとしたら、文字列が入力ではないと処理ができない(と考えられて設計されている)ためと思います。
具体的に、どの関数でどう困っているのか、どう動作するのが良いのかがあれば、検討・対応可能かもしれません。
(ユーザ関数を定義して変数型確認などで関数全般の話なのか、個々の関数の仕様なのか、試してみてください。例えば、以下ではハッシュと表示されると思います。
-----
Aとはハッシュ
Aでテスト関数
●テスト関数(Bで)
Bの変数型確認を言う
-----
)
なお、メモ記入の引数は文字列である必要があります。テキストエディタはテキスト(=文字列)以外をどう扱ってよいのか知りません。もし、ハッシュうけとって編集してハッシュを返すとうなエディタのようなものがあるとしたら、プロパティエディタのような感じになると推測できます。
(なお、通常、ハッシュは配列と違い、内容に順序を持たない(維持しない)ことも注意が必要です)
1と2については調べて対策するようにします。
なお、改行や「=」という、特定の文字コードで意味のある文字に依存している以上、制御コードや文字コードに存在しない文字については、期待している通りに処理できる保証はできません。特に、Shift_JISであるこが前提となっているため、場合によってうまく動かないなどの場合には、Shift_JISの文字に絞り込んでください(バイナリ対応の一部の命令を除いてバイナリを正しく扱えません。特に、$00で切れてしまったりとかします)
今回の場合ですと、おそらく、文字コード$00までが扱いたいデータで、その後ろはゴミっぽい感じがします。以下のような関数で切り出してから処理してみてください。
----
●ゴミ除去({参照渡し}Sから)
Iとは整数
IはSで「{\\0}」が何バイト目
もし、Iが2以上ならば、
SはLEFTB(S,I-1)
違えばもし、Iが1ならば、
Sは``
それはS
-----
ここで使用している、「何バイト目」と「LEFTB」は、(数少ない?)バイナリを扱える命令です。