StringBuilder 側からメモリの拡張は容易ですが、GetWindowsDirectory に 引き渡す長さ以上の文字列が戻って来る場合は異常終了します
Imports System.Runtime.InteropServices ' DllImport
Module MyModule
' UINT GetWindowsDirectory(
' LPTSTR lpBuffer, // Windows ディレクトリが格納されるバッファ
' UINT uSize // ディレクトリバッファのサイズ
' );
<DllImport("Kernel32.dll", CharSet:=CharSet.Unicode)> _
Private Function GetWindowsDirectory( _
ByVal lpBuffer As System.Text.StringBuilder, _
ByVal uSize As System.UInt32 _
) As System.UInt32
End Function
Sub Main()
' C:\WINDOWS を取得します
Dim lpBuffer As System.Text.StringBuilder = New System.Text.StringBuilder(128)
Dim uRet As System.UInt32
uRet = GetWindowsDirectory( lpBuffer, 128 )
' uRet は 10 です
Console.WriteLine( uRet )
Console.WriteLine( lpBuffer )
' Length プロパティで切り捨てられて C:\WIN になります
lpBuffer.Length = 6
Console.WriteLine( lpBuffer )
End Sub
End Module
関連する Microsoft ドキュメント 文字列に対する既定のマーシャリング 値型に対する既定のマーシャリング
タグ:Win32API
|
|
【VB.NET : テクニカルの最新記事】
- VB.net(C#) : Picasa より指定したアルバム内の画像の URL 一覧を取得する
- VB.net(VS2010) で COM へ公開して、WSH(VBScript) で利用する( C# でも同様 )
- VB.net : Picasa にアクセスする為に、Google Data API にログインしてトークンを取得する
- VB.net : 画像の上にテキストを半透明で出力する
- VB.net と C# における KeyPress イベントの受け取り方
- VB.net : フォーカス イベントの発生順序と注意事項
- VB.net クリップボードの処理 ( C# は注意 )
- VB.net : 自分自身(というか元々プロテクトメソッド)を呼び出す遅延処理用プライベートタイマークラス






