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 : 自分自身(というか元々プロテクトメソッド)を呼び出す遅延処理用プライベートタイマークラス