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

投稿日: 2005/01/27(Thu) 17:50
投稿者魔界の仮面弁士
Eメール
URL
タイトルRe^4: RtlMoveMemoryの振る舞い

一箇所補足。

> > byvalでstring型で渡すのは何か気持ち悪いのです。
> 「相手が LPSTR の場合に、ByVal で渡す仕様である」という点に関しては、
> VB6のヘルプにも書かれていますね。

「ByVal S As String」で渡す必要があるのは、相手が LPSTR で
ある時だけだという事に注意してください。
それ以外の文字列型では、別の手順が必要になる可能性があります。


たとえば下記では、 LPOLESTR 形式の文字列を操作する API (CLSIDFromString) を
利用していますが、この場合、宣言側の引数を ByVal lpszCLSID As String や
ByRef lpszCLSID As String にしてしまうと、正しく処理できなくなってしまいます。

========================
Private Type UUID
    Data1    As Long    'unsigned long  Data1
    Data2    As Integer 'unsigned short Data2
    Data3    As Integer 'unsigned short Data3
    Data4(7) As Byte    'unsigned char  Data4[8]
End Type

'第1引数は、Long型の値渡しになっている点に注意
Private Declare Function CLSIDFromString Lib "ole32" _
   (ByVal lpszCLSID As Long, ByRef pclsid As UUID) As Long

Private Function ToCLSID(ByVal S As String) As UUID
    'ByVal As Long に対して、StrPtr()を渡しています。
    CLSIDFromString StrPtr(S), ToCLSID
End Function

Private Sub Form_Load()
    Dim X As UUID
    X = ToCLSID("{00000514-0000-0010-8000-00AA006D2EA4}")
    'X にデータが格納される。
End Sub
========================

このタイプの関数に文字列を渡す(あるいは受け取る)場合の手順は、
下記を参照してみてください。
hhttp://support.microsoft.com/kb/183544/


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

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

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