VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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バイトも含めて。
このあたりの振る舞いについて、教えていただけますでしょうか?
よろしくお願いします


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -