投稿日 | : 2005/01/27(Thu) 09:49 |
投稿者 | : DODOON |
URL | : |
タイトル | : RtlMoveMemoryの振る舞い |
すいませんDODOONと申します。
プログラム4年目です。
VB6をservice Pack5で使用しています。
質問はRtlMoveMemoryの振る舞いについてです。
いま、VCで共有メモリを作成して、そこにVBから書き込むプログラムを作成しています。
VC上でcharの4バイトの領域をCreateFileしました。
そこをVBからOpenFileMappingをして、MapViewOfFileを行います。
Ptr = MapViewOfFile(hMFd, FILE_MAP_ALL_ACCESS, 0, 0, 0)
そのポインタの場所にstring型のstrStrを書き込もうとしました。
dim strStr as string
strStr = "C1 "
Call RtlMoveMemory(ByVal Ptr , ByVal StrPtr(strStr), 4)
上記のように書き込むとcharの4バイトのところに
char[0] = 'C' char[1] = 0x00 char[2] = '1' char[3] = 0x00
とユニコードの形で書き込まれます。
また
Call RtlMoveMemory(ByVal Ptr , ByVal strStr, 4)
上記のように文字列ポインタの関数を使わないと
char[0] = 'C' char[1] = '1' char[2] = 0x20' char[3] = 0x20
と書き込まれます。
基本的にVBのString型はユニコードだと思ってますが、
よくシーケンシャルファイルに書き込んだら、普通にアスキーコードに変換されてたり
します。
このあたりは、皆さんはVBまかせにしているのでしょうか?
私としてはAPIでString型を使う時はユニコードとして振舞ってもらうほうが
ありがたいのですが、日本語文字の2バイトも含めて。
このあたりの振る舞いについて、教えていただけますでしょうか?
よろしくお願いします