vb.netでByte型の実配列サイズが大きい件
- vb.netでByte型の配列を100byteで宣言しましたが、実際の配列サイズは101byteになりました。
- CとかC++では、有り得ない仕様ですが、どういう意味が有るのでしょうか?
- ご教示お願い致します。
- ベストアンサー
vb.netでByte型の実配列サイズが大きい件
vb.netでByte型の配列を100byteで宣言しましたが、実際の配列サイズは101byteになりました。 (例) Module Module1 Sub Main() Dim buffSize As Integer = 100 Dim inputBuff(buffSize) As Byte Dim ii As Integer = inputBuff.Length Console.WriteLine("バッファサイズ = {0}", ii) End Sub End Module ここで、iiは、101となります。 CとかC++では、有り得ない仕様ですが、どういう意味が有るのでしょうか? ご教示お願い致します。
- YkazubonY
- お礼率57% (62/108)
- SE・インフラ・Webエンジニア
- 回答数1
- ありがとう数2
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Basic 系の言語は配列は 0から始まります Dim A(100)とすると 0~100 で 101個の配列が用意されます。 Option Base 1 を宣言するか、 Dim A(1 To 100) で配列の開始を 1にすれば、配列は 100個になります。 単に 100バイト指定したいのなら Dim A(99) でもいいです。
関連するQ&A
- 配列
エクセルvbaなのですが Sub test() ' 配列 Dim arr() As Integer= {0, 1, 2, 3, 4, 5} ' 抜き出した要素を格納するための変数 Dim i As Integer ' すべての要素について繰り返す For Each i In arr Console.WriteLine (i) Next End Sub これって何でエラーになるのでしょう? Dim arr() As Integer= {0, 1, 2, 3, 4, 5} でエラーになりますが、なぜだかわかりません。
- ベストアンサー
- Visual Basic
- VB.NETのデリゲートについて
VB.NETのデリゲートについて質問です。 以下のプログラムなのですが、 デリゲート型をインスタンス化しているところで、コンストラクタにパラメータを渡していますが、 そのコンストラクタはどこに定義されているのでしょうか。 (AddressOf t1.Ohayou)というパラメータが渡されていますが、このパラメータを受け取っているコンストラクタがどれなのかが分かりません。 ご教示よろしくお願いいたします。 Delegate Sub Myprint(ByVal s As String) Module Module1 Sub Main() Dim t1 As Test1 = New Test1() Dim t2 As TEst2 = New Test2() Dim d As Myprint = New Myprint(AddressOf t1.Ohayou) d.Invoke("VB太郎") d = New Myprint(AddressOf t2.Konbanwa) d.Invoke("VB太郎") End Sub End Module Class Test1 Sub Ohayou(ByVal s As String) Console.WriteLine("おはようございます。{0}です。", s) End Sub End Class Class Test2 Sub Konbanwa(ByVal s As String) Console.WriteLine("こんばんわ。{0}です。", s) End Sub End Class
- 締切済み
- Visual Basic
- VBで理解ができないところがあります
初めまして、Y-Kobayashiです。 私はVisualBasicを勉強しているのですが、行き詰っております。 なぜかと言いますと、サンプルプログラムを打ち込んでも、そのままでは実行ができないからです。 使用している書籍は「かんたんVisual Basic(技術評論社)」というものです。 以下が、そのサンプルです。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Module Module1 Private mName As String = "YOSHI" Sub Main() Dim SUJI As Integer = 3 If SUJI = 3 Then Console.WriteLine(mName) End If '-> Console.ReadLine() End Sub Sub DispMsg() Console.WriteLine("Hello {0}", mName) End Sub End Module ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Sub Main()内のmNameは表示されるのですが、Sub DispMsg()内のものが表示されないのです。 一応、「'->」のある位置に「DispMsg()」と入れれば実行されるのですが、書籍にはそういった記載がありません。 どうすれば良いのでしょうか? 他にも、Subとはどういう意味なのか、Moduleとはどういう意味なのか、それらはどの様な働きをするのか等、最初から使う物にも関わらず記載がなされていないので、明確に認識ができない状態です。 SubはC言語でいうところの、関数の様なもの。 Moduleはそれらをまとめるグループ(?)もしくは関数の様なもの。 NameSpeaceはModuleをまとめるグループ(?)もしくは関数の様なもの。 という認識を持ちつつありますが、これで合っているのでしょうか? VBの参考書はこういった説明が省かれる傾向があるのでしょうか? 図書館で何冊か見ましたが、途中から出てくる単語の解説が無くなって行きます。 それらは大抵自動で入力されるのですが、意味が分からないと気持ち悪いです。 おすすめの参考書があれば教えてください。 よろしくお願いします。 乱文失礼しました。
- ベストアンサー
- Visual Basic
- VB.NETからC++のdll連携(double)
プログラム初心者です。 double型の配列をVB2010とC++で作成したdllで連携したいのですが、値が正しく渡されません。 値が正しく渡せるにはどうしたら良いでしょうか? 以下がその内容です。(int型の場合)これをdouble型で渡したいのですが。 C++ではSafeArrayの扱いになるとのことですが、方法が良く分かりません。 VBソース ----------------- ' Arrays.vb Imports System Imports Microsoft.VisualBasic Imports System.Runtime.InteropServices Friend NotInheritable Class NativeMethods Private Sub New() End Sub Declare Function TestArrayOfInts Lib "makedll.dll" ( _ <[In](), Out()> ByVal myArray() As Integer, ByVal size As Integer) As Integer End Class Public NotInheritable Class App Private Sub New() End Sub Public Shared Sub Main() ' *************** array ByVal ************** Dim array1(9) As Integer Console.WriteLine("Integer array passed ByVal before call:") Dim i As Integer For i = 0 To array1.Length - 1 array1(i) = i Console.Write(" " & array1(i)) Next i Dim sum1 As Integer = NativeMethods.TestArrayOfInts(array1, array1.Length) Console.WriteLine(ControlChars.CrLf & "Sum of elements:" & sum1) Console.WriteLine(ControlChars.CrLf & "Integer array passed ByVal after call:") For Each i In array1 Console.Write(" " & i) Next i Console.Read() End Sub End Class //********************************** C++作成dllソース(makedll.cpp) extern "C" MAKEDLL_API int TestArrayOfInts( int* pArray, int size ) { int result = 0; for( int i = 0; i < size; i++ ) { result += pArray[ i ]; pArray[ i ] += 100; } return result; } //********************************** C++作成dllソース(makedll.h) #ifdef MAKEDLL_EXPORTS #define MAKEDLL_API __declspec(dllexport) #else #define MAKEDLL_API __declspec(dllimport) #endif extern "C" MAKEDLL_API int TestArrayOfInts( int* pArray, int size ); //********************************** C++作成dllソース(makedll.def) LIBRARY makedll.dll EXPORTS TestArrayOfInts PRIVATE
- ベストアンサー
- C・C++・C#
- 配列を引数で渡したりするには?
初心者なので困っています。配列をほかのサブルーチンへ渡して、その中で配列の値を書き換えて、上層のルーチンへ渡すにはどうしたらよいのでしょうか? 初心者なので、みなまさまのお知恵を拝借させてください。よろしくお願いします。 Private Sub Print() Dim C_ALL(3) As Integer Dim D_ALL(3) As Integer Data_Set(C_ALL(), D_ALL()) MsgBox(C_ALL() & " " & D_ALL()) '配列内容すべて表示 End Sub Private Sub Data_set(ByRef C_ALL As Integer, ByRef D_ALL As Integer) Dim i As Integer For i = 0 To 4 C_ALL(i) += i D_ALL(i) += i i += 1 Next End Sub
- 締切済み
- Visual Basic
- [VB6/VBA] Variant型配列リテラルの書き方
http://oshiete1.goo.ne.jp/qa4043791.html の#1のURIに http://exceler.blog68.fc2.com/blog-entry-20.html Dim a() As Variant // As Variant追加。As Integerとかは無理っぽい a = [{32,5,0}] //これ というような表記があるのですが,msdn.comもしくはmicrosoft.comのどこかに,この書き方に関する解説はありますか? VB.NETで Option Explicit On Option Compare Binary Option Strict On Option Infer Off Module Program Sub Main() Dim a() As Integer a = new integer(){1,2,3} End Sub End Module というような書き方が出来るのは知っているのですが。
- ベストアンサー
- Visual Basic
- VB.NETSystem.Xml 要素数を得るには
VB.NETでSystem.Xmlを参照設定して以下のXMLファイル(test.xml)のsub4_9のtestの個数を得たいのですが domNode = domDoc.SelectSingleNode("top/sub4_9/test") Console.WriteLine("Count of top/sub4_9/test = " & domNode.?????) というようにしましたが?????の部分にLengthやCountがありません。 また、 rootElement = domDoc.DocumentElement domNodeList = rootElement.GetElementsByTagName("sub4_9/test") Console.WriteLine("Count of top/sub4_9/test = " & domNodeList.Count) というようにもしてみましたが個数は誤った0が返されます。 どのように記述すればsub4_9のtestの個数を得ることができるでしょうか。 ----test.xml------------- <top> <sub1_1> <test>123</test> <test>451</test> : </sub1_1> : <sub4_9> <test>432</test> <test>123</test> <test>745</test> : </sub4_9> : <sub9_5> <test>222</test> : </sub9_5> </top> --VB.NET------------------------ Imports System.Xml Imports System.IO Module Module1 Sub Main() Dim domDoc As New XmlDocument Dim domNode As XmlNode Dim domNodeList As XmlNodeList Dim rootElement As XmlElement domDoc.Load("test.xml") rootElement = domDoc.DocumentElement domNode = domDoc.SelectSingleNode("top/sub4_9/test") Console.WriteLine("Count of top/sub4_9/test = " & domNode.?????) domNodeList = rootElement.GetElementsByTagName("sub4_9/test") Console.WriteLine("Count of top/sub4_9/test = " & domNodeList.Count) End Sub End Module ----------------------------------- よろしくお願いします (WindpwsXP,VisualStudio2010)
- ベストアンサー
- Visual Basic
- VB.NETの関数プロシージャの書き方を教えてください。
Public A As String という変数にある文字列データが入っていて、 ボタンを押すとその時に変数X,Y,Zに入っている 文字列を検索してButton1_Clickプロシージャ内に戻って来て KekkaX,KekkaY,KekkaZに数値が入るような関数プロシージャなのですが、 呼び出す部分の書き方と関数のプロシージャ名の書き方を教えて頂きたいです。 検索する部分は自分で出来ると思うので大丈夫です。 Public A As String = "何かの文字列" Button1_Click Dim X,Y,Z As String Dim KekkaX,KekkaY,KekkaZ as Integer '変数Aの中からX,Y,Zを検索したい X="*****" Y="ABCDE" Z="#####" GetKensakuKekka(????????) ←この部分の書き方を教えて下さい。 'KekkaX,KekkaY,KekkaZ 内に検索結果を取得したい Console.WriteLine(KekkaX) Console.WriteLine(KekkaY) Console.WriteLine(KekkaZ) End Sub Function GetKensakuKekka (???????????) ←この部分の書き方を教えて下さい。 ・ ・ ・ End Function よろしくお願い致します。
- ベストアンサー
- Visual Basic
- VB 配列の内容をファイルに書き込む
VB2008を使用しています。 stg_bitという配列に一文字ずつ「abc・・・」 のように入っているものを、テキストファイルに出力したいのですが・・・ stg_bitという配列の内容をファイルに書き込みたいのですが、 うまくいきません。 ご教授お願いします!! Dim i As Integer Dim stg_str As String Dim Writer As New IO.StreamWriter("C:sample.txt") Writer.WriteLine(stg_bit) Writer.Close()
- ベストアンサー
- Visual Basic
- VB.Netでのシリアル通信についての質問
VB6.0でバイト型変換を行ってからバッファに送信する プログラムを使用しているのですが、これを.Netにて 同様に行う記述方法が分りません。お分かりになる方 よろしくお願い致します。抜粋しておりますのでヘンテコ なソースかとは思いますがよろしくお願い致します。主にChrBが使用出来なくなった事が困っております。 (VB6.0と同様にAxMSCommを使用しております。) Private Sub Rs232c_Com() Dim bytOutByte() As Byte Dim strCmdData as String strCmdData="83" 'コマンド送信 bytOutByte() = ChrB(Val("&h" & strCmdData)) MSComm1.Output = bytOutByte() End Sub
- ベストアンサー
- Visual Basic
お礼
VB.NETはVB5以来で久しぶりなので、全く知りませんでした。有難うございます。