こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

★変数の属性について(VB.net 2005以上)

とあるプログラムの解析を行っています。 1997年に作られた古いもので
何回もバージョンアップや改造がされているプログラムの一部です。

Public structure Localkanri
  
<VBFixedstring(5),system.runtime.interopservices.marshalAs(system.runtime.interopservices.unmanagedtype.byvaltstr,Sizeconst:=5)>
Public End_checkNo as string
Public hh as string
Public BB as integer
End structure

上記の属性の指定されている内容の意味が知りたいのですが・・・・
VBFixedstring(5), は5バイトの固定長です。の宣言。後ろのカンマの意味は何でしょうか?

カンマで区切られ MarshalASの指定にてCLRが管理しないunmanagedtype
で指定されたbyvaltstr 型。
またカンマで区切られていて
Sizeconst:=5 この意味はなんでしょうか?

どなたかご教授ください。

投稿日時 - 2018-01-27 01:58:31

QNo.9422659

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

>後ろのカンマの意味は何でしょうか?
https://docs.microsoft.com/en-us/dotnet/visual-basic/reference/language-specification/attributes#attribute-blocks

投稿日時 - 2018-01-29 11:19:07

ANo.2

まず1997年だとVB.NETはまだないです。
VB 6.0か5.0ぐらいかと思います。
marshalとか出てくるのは、APIに変数を渡したい時によく出てきたのを覚えています。
unmanagedtypeってのもAPI絡みだと思われるところです。
Sizeconstってのは、バッファのサイズじゃないのかなと思います。
あてずっぽうですみません。

投稿日時 - 2018-01-27 14:26:43

補足

>>まず1997年だとVB.NETはまだないです。
>>VB 6.0か5.0ぐらいかと思います。
その通りですが、勘違いしていませんか?
現状ではVb.net2010で動作しています。
その当時作られマイグレーションを経て今に至っています。
その際にマイグレーションの能率を上げるために新たなツールでVB6から
vb2003 などに引き上げ、さらにマイグレーションを重ねて今に至る状態です。
それらのツールで自動生成され書き加えられているからこのようなことになっているのだと思います。

下記の参考サイトを私は読みました。それでも理解不能です。
そういった事情をご理解ください。

参考サイト
Insider.NET > 連載:VB.NETプログラミング > 第28回 属性(前編)
  http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet28/vb6tonet28_01.html

Insider.NET > 連載:VB.NETプログラミング > 第29回 属性(後編)
http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet29/vb6tonet29_01.html

投稿日時 - 2018-01-27 17:36:03

「5行目に問題があるよ」って読みました。

Byval ではなく、Byref で、C言語でいう ポインタ であれば構造体のメンバに登録できます。(と読みました)

アセンブラで言えば

hh[256]
・・・・

んと、hh*256 とか・・めんどくせー(すみません、前後が分からないのでここまで)

投稿日時 - 2018-01-27 08:12:49

あなたにオススメの質問