• ベストアンサー

VB6で固定長の文字列の長さを変更するには

あるライブラリを呼ぼうとしているのですが、 dim str as string * 100 dim lngLen as long lngLen = dlllib str と実行すると問題ないのですが、上記の100というのは、 固定値に出来ません。この値は、 lngLen = dlllib 0 で取得できる、lngLenの値にしたいです。 その場合は、どうすればよいでしょうか? 久しぶりにVB6をやって困っています。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

固定長文字列の宣言後の文字長の変更、あるいは、動的に長さを指定しての作成は、できないと思います。 バリアント文字列で代用できると思います。

その他の回答 (1)

回答No.2

Dim str As String str = Space(lngLen) としてみたらどうなるんでしょう。

w0a15455
質問者

お礼

お二人ともありがとうございました。 どちらの方法でも出来ました。

関連するQ&A

  • VB2005 から DLL を呼び出す

    VB 初心者です。 今、VB の練習ということで VB 2005 Express Edition を使って、個人用ブラウザをつくっています。Web ページの表示は Webbrowser コンポーネントを使っています。 その仕様で、閲覧先によって HTTP Proxy を変更するようになっています。(自分で決めたんですが) いろいろ調べてみると、urlmon.dll の UrlMkSetSessionOption() を呼べば自分のアプリケーション限定で Proxy を変更できるようだ、ということがわかりました。 古い VB など(VB 6 とか?)では、 Private Declare Sub UrlMkSetSessionOption Lib "urlmon.dll" _ (ByVal dwOption As Long, ByVal pBuffer As Any, _ ByVal dwBufferLength As Long, _ ByVal dwReserved As Long) このような感じで宣言するとかあったんですが、VB2005 では Any がダメだとか、 Type INTERNET_PROXY_INFO Dim dwAccessType As Long Dim lpszProxy As String Dim lpszProxyBypass As String End Type で Type はダメだとか、呼び出し側で、LenB を使おうとしたら使えないだとか、INTERNET_OPTION_PROXY の値がわからないなど、問題が山積みです。 上記 DLL を VB 2005 で使ったことがある人がいたら(またはわかる人)、使い方を教えてもらえないでしょうか?

  • VB.netでパスワード変更

    下記のようなパスワードを変更するフォームをVB.netで作成したのですが、 実行すると、いつも異なるretValの値がかえってきて変更できません。 retValの値もよくわからない大きな数値がかえってくるのでどのようなエラーかも 判断つかず。 どこが間違っているかお分かりになる方いらっしゃいますでしょうか。 Public Class Form1 Private Declare Function NetUserChangePassword Lib "netapi32.dll" (ByVal Domain As String, ByVal User As String, ByVal OldPass As String, ByVal NewPass As String) As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim retVal As Long Dim sDomain As String Dim sUser As String Dim sOldPass As String Dim sNewPass As String sDomain = "xxxxxxx" ←ここはサーバのIPアドレス sUser = TextBox1.Text sOldPass = TextBox2.Text sNewPass = TextBox3.Text retVal = NetUserChangePassword(sDomain, sUser, sOldPass, sNewPass) MsgBox(retVal) End Sub End Class

  • 日付型の文字列への変換 VB2008

    VB2008を使っています。 日付型のデータがあり、それを文字列にしようと思っています。 私がごっちゃまぜになっているのは、以下の3つです。 (1) Foamt(値, 書式) (2) Strings.Foamt(値, 書式) (3) String.Format(書式, 値) Option Strict On Option Infer Off Dim d As Date Dim s As String d = Date.Parse("2009/07/30") s = Format(d, "yy/mmm/d") '(1)の場合 とすると、 sは "09/Jly/30"と思っていましたが "09/00/30"となりました。 (Format) http://www.red.oit-net.jp/tatsuya/vb/date.htm 何が駄目なのでしょうか? (1)、(2)、(3)でそれぞれ 09/Jly/30と表示させたいのですが、 ご存知の方教えてください。 また、(1)~(3)は何が違い、VB2008では何を使うのが一番よいのでしょうか?

  • VB6.0 文字列のファイル書き込み

    こんにちは。 VB6.0を研修中の新人です。 テキストファイルにランダムアクセスをし半角全角混じりの文字列を書き込むコードを考えています。 連休中は会社に入れないので自宅でコードをどのように書くかある程度決めておきたいです。 ■ あいうえお ■ カキクケコ ■ サシスセソ   (サシスセソは半角です)   ■ タチツテトはひ (タチツテトは半角です) メモ帳.txtに文字列を書き込むと上記のように書き込まれます。 これは見た目が悪いので下記のように"■ "がないように書き込むことは無理でしょうか。 あいうえお カキクケコ サシスセソ    (サシスセソは半角です) タチツテトはひ  (タチツテトは半角です) いま書いたコードは下記のとおりです。 Public Sub Main() WriteFile End Sub '書き込む関数 Public Sub WriteFile()   Dim i As Integer   Dim str As String   Open "C:\メモ帳.txt" For Random As #1 Len = 14   Do While < 5     Select Case i       Case 1 str="あいうえお"       Case 2 str="カキクケコ"       Case 3 str="サシスセソ"       (サシスセソは半角です)       Case 4 str="タチツテトはひふへほ" (タチツテトは半角です)     End Select     strNagasa(str,10) + vbCrlf     Put #1,i,str     i = i + 1   Loop   Close #1 End Sub '文字列をレコードの長さに合わせる関数(いまの場合は10バイト) 'Nagasaが"10"の場合 'strが "サシスセソ" なら "サシスセソ" に半角スペースを5個詰めて返す。 'strが "タチツテトはひふへほ" なら "タチツテトはひ" の9バイトで文字列を切って半角スペースを1個詰めて返す。 Public Function StrNagasa(str As String,Nagasa As Integer) As String   ...   省略(完成済み)   ... End Function

  • 文字列を返すVCで作成したDLL関数をVBで呼ぶと...

    VC++で文字列を返すDLL関数を作成しました。 LPCSTR GetVcString(void) これをVBでStringとして受け取り、MsgBoxで表示すると正常に取得できているようなのですが、Lenで文字数を取得すると変な値が返ってきます。 1. Dim Ret As String 2. Ret=GetVcString() 3. MsgBox(Ret) ← VCで返された文字列は正常に表示されている 4. MsgBox(Str(Len(Ret))) ← 実際の文字数とはかけ離れた数値になる 2行目と3行目の間に、 Ret=Left(Ret,InStr(Ret,vbNullChar)-1) を噛ませれば文字数は正常な値になるのですが、このような処理をしなくても正常に文字数を取得する方法があれば教えてください。

  • 文字列操作

    VB6です。 質問させてください。 ↓例、Buffer変数に取得データが入ります 最終的に下記の3つの値を取得したいです。 Value(1) = "ABC" Value(2) = "DEFGHIJKL" Value(3) = "MN" 少し長いと思います。スマートな方法はございますか? ----- Dim Buffer As String Dim Temp1 As String Dim Temp2 As String Dim Value() As String Buffer = "?ABC-?DEFGHIJKLMN-" '取得データ '前後?-を除きます。 Temp1 = Right(Temp1, Len(Buffer)-1) Temp1 = Left(Temp1, Len(Temp1)-1) 'この時点で、4文字目、5文字目の-?を除きます Temp1 = Left(Temp1, 3) Temp2 = Right(Temp1, 11) '"ABCDEFGHIJKLMN"を取得 Value = Temp1 & Temp2 '"ABC"を取得 Value(1) = Left(Value, 3) '"DEFGHIJKL"を取得 Value(2) = Right(Value(2), Len(Value)-3) Value(2) = Left(Value(2), Len(Value)-2) '"MN"を取得 Value(3) = Right(Value, 2)

  • .NET 文字コードの変換

    VB2008で文字列を他の文字コードにする方法が知りたいです。 何かしての部分がわかりません。 VB2005でも使えるものだったらうれしいです。 Dim str_sjis as string Dim str_euc as string = "パソコン" '例えばEUC-JP '''何かして str_sjisにシフトJISで文字列が入っている。 .Netの文字コードの変換の仕方がごちゃごちゃして分かりづらいです。

  • Date型へのキャストについて

    VB.NET初心者です。 String型からDate型へキャストをしたいのですが、よそのサイト様を参考にいろいろ試してみたのですが、うまくいかず困っています。どなたか、教えてください。よろしくお願いします。 エラー:『文字列は有効なDateTimeではありません』 Dim str1 As String = "2009/08/01" または Dim str2 As String = "2009/08/01 12:00:00" str2 = str2.substring(0,10).replacce("/","") の形式で取得した値を"yyyy/mm/dd形式で"Date方へキャストしたいのですが.... Dim dt As Date = Date.ParseExact(str, "yyyy/MM/dd", Nothing) Dim dt As Date = Date.parse(str) Dim dt As Date = Ctype(str, Date) など試してみたのですが、#8/1/2009#のように書式がおかしいのですが、どこを直せばよいのでしょうか? Date.ParseExact()でできると思っていたのですが、悩んでいます。よろしくお願いします。

  • dllを使用しVB側に文字列を返す2

    No.280310の質問の続きになってしまいますが 「VCで作ったdllを使用し VBに文字列を返すことはできますか」 でVCで作ったdllをVBを呼び出す事ができるようになりました。 Declare宣言で疑問に思ったのですが Declare Function TxtCnt Lib "hoge.dll" (ByVal a As String) As Long aはなぜ値渡しなのでしょうか? 変数が書き換えられて戻ってくるので、byrefで指定していました。 それが問題が起こしていた原因一つでした。 ちなみにint型の数値をポインタで渡した場合はbyrefでうまくいきます。 ご教授願います。

  • vb2008で文字列から文字列コードを取得する方法

    サイトHTMLをWebBrowserを使用せずに取得するために、 Dim stream As System.IO.Stream = client.OpenRead(tbItemURL.Text) Dim reader As New System.IO.StreamReader(stream) Dim strHtml = reader.ReadToEnd() reader.Close() stream.Close() のような形で文字列を取得しています。 しかし、この場合Sift-jis等の場合、後の作業(一部データ取得)で文字化けに悩まされます。 http://dobon.net/vb/dotnet/string/detectcode.html 上記サイトで「バイト配列」に格納して判別する方法があります。 そこで、文字列をバイト配列に格納しようとしますが…。 文字列→バイト配列には文字コードが必要となります。 Dim data() As Byte = Encoding.UTF8.GetBytes(text) なんだか鶏と卵のような感じになってしまいます。 文字列から文字コードを判別する方法はないでしょうか? よろしくお願いします。