10代と話して驚いたこと

VBで構造体を使う際に、起動すると64kを超える事は出来ませんとエラーが出ます。
構造体上は64k越えてもいないのに、このようなエラーが発生します。
また、可変長配列などにすると起動は出来るのですが、
結局、データが増えていけば、エラーになると思われます。
何か良い方法はありませんか?
教えてくださいm(__)m
P.S. レジストリはあまりいじりたくないのですが・・・

A 回答 (5件)

WWW()=TTTT(2)  '1回目


このような使い方できません。

Redim Preserve WWW(500000) '500000回目
でも問題ありません。

連続した64キロバイト以上のメモリを確保できない
といっているのです。
Redim Preserve WWW(500000)のように
断片化した64キロバイト以上のメモリは確保できる。
    • good
    • 1
この回答へのお礼

なるほど!!
よくわかりました。
ありがとうございます。m(__)m

お礼日時:2003/05/14 13:14

コンパイルエラー


「固定長文字列型や静的変数のデータの大きさは64KBを超えることはできません。」
の事でしょうか?

string * 70000とかは無理です。
あるいは構造体のサイズが64キロバイトを超えることも不可です。

Type AAA
a(20000) As Byte
b(30000) As Byte
c(40000) As Byte
End Type

20000 + 30000 + 40000 + 構造体の情報(約30) > 65536(=64キロバイト)
なので上記のエラーが発生します。

この回答への補足

言われているとおりですが・・
たとえば、
Type AAA
a(10000) As Byte
End Type

public TTT(2) as AAA
public WWW() as AAA

の構造体で、TTT(2)には毎回新しいデータが入ってくるとすれば

WWW()=TTTT(2)  '1回目

WWW()=TTTT(2)  '2回目


WWW()=TTTT(2)  '4回目

ではエラーが出るが

Redim WWW(2)  '1回目
WWW(1)=TTTT(1)
WWW(2)=TTTT(2)

Redim Preserve WWW(4)  '2回目
WWW(3)=TTTT(1)
WWW(4)=TTTT(2)



Redim Preserve WWW(8)  '4回目
WWW(7)=TTTT(1)
WWW(8)=TTTT(2)

では定義している(Redimしている)バイト数が64Kを超えていない為問題ないという事でいいんでしょうか?

補足日時:2003/05/12 13:12
    • good
    • 0

>エラーにはならないのでしょうか?


なりません。動的メモリ確保はメモリが断片化してもそれをOSが制御しています。

この回答への補足

ありがとうございます。m(__)m
申し訳ないですが、教えていただきたいのですが
64Kのエラーはどういった場合に発生するのでしょうか?
もう少し詳しく教えていただけないでしょか?
よろしくお願いします。

補足日時:2003/05/12 09:20
    • good
    • 0

動的にとれば良いだけです。



Private Sub Form_Load()
Dim jew() As JEW99A
ReDim jew(100)
'足りなくなったら増やす。
ReDim Preserve jew(1000)
End Sub

この回答への補足

なるほど・・
でも、ReDimした新しい構造体が64kを超えてしまっても
問題ないのでしょうか?
エラーにはならないのでしょうか?
例えば、

ReDim jew(100)  '//20Kバイト



ReDim Preserve jew(200)  '//40Kバイト



ReDim Preserve jew(400)  '//80Kバイト

までいった場合は、この時点でエラーになりそうですが
大丈夫なのですか?

補足日時:2003/05/09 18:47
    • good
    • 0

「可変長文字列 1 つにつき 4 バイトだけが使われ、実際の文字列の内容は別な場所に保存される」


ということなので、可変長文字列をうまく使用してはいかがでしょうか?

この回答への補足

具体的にはどういった形で制御すればいいんでしょうか?
ちなみに使っている構造体は以下のとおりです。

-------------------------------------------
Type JEW99A
WCRNRITMID(7) As Byte
WCUSERID(5) As Byte
WCGYOMGP(1) As Byte
WCHAKOBMCD(18) As Byte
WCFILLER(18) As Byte
WCERROKKNA(27) As Byte
WCABNDCD(8) As Byte
WCABNDMS(59) As Byte
WCGYOMNA(29) As Byte
WCGYOMMS(61) As Byte
WCFILLER02(6) As Byte
End Type

Type WC_HEDB21
WCSOUKCD(3) As Byte
WCRYKSSKMYKJ(11) As Byte
WCSHKADTHD(7) As Byte
WCKRMANO(3) As Byte
End Type

Type WC_HEDB22
WCSHKANOHD(6) As Byte
End Type

Type WC_HEDB23
WCMEISGYSU02(2) As Byte
WCTUGIDEUMKB(0) As Byte
WCTGTORHSKSBKB(0) As Byte
WCTGOKSKSQCD(12) As Byte
WCTGHDASSKCD(3) As Byte
WCTGHDASZCCD(1) As Byte
WCTGSHKANO(6) As Byte
WCTGNTMIJNKB(1) As Byte
WCTGHNBN(24) As Byte
WCTGHOJOCD(2) As Byte
WCTGTKYU(0) As Byte
WCTGSSTMKB(0) As Byte
WCTGOTOINO(10) As Byte
WCTGEDBNOTNO(2) As Byte
End Type

Type WC_MSAB21
WCKRMANOKB(0) As Byte
WCHOMNGP(1) As Byte
WCHOMNGPMY(15) As Byte
WCTUMIGP(4) As Byte
WCTUMIGPMY(19) As Byte
WCSHKASGGP(1) As Byte
WCSHKASGGPMY(15) As Byte
WCHSYAKB(0) As Byte
WCHSYAKBMY(19) As Byte
WCHISOHH(1) As Byte
WCUNGYCD(4) As Byte
WCRYKSGYMY(19) As Byte
WCSSYU(1) As Byte
WCSSYUMY(19) As Byte
WCMAXXAISU(9) As Byte
WCMAXXAIJR(9) As Byte
WCMAXTIMESP(25) As Byte
End Type

Type WC_MSAB22
WCHISOJN(2) As Byte
WCHISOSKMY(25) As Byte
WCSHKANO(6) As Byte
WCHDASSKCD(3) As Byte
WCHDASZCCD(1) As Byte
WCHISOKTKB(0) As Byte
WCSSTMKBOTNO(0) As Byte
WCOTOINO(10) As Byte
WCEDBNOTNO(2) As Byte
WCHINNNA(9) As Byte
WCTOUUCD(0) As Byte
WCHNBN(13) As Byte
WCTKYU(0) As Byte
WCSURY(3) As Byte
WCKNPOSU(2) As Byte
WCHASUBRSU(2) As Byte
WCSSUU(8) As Byte
WCJRYO(8) As Byte
WCBIKO(3) As Byte
WCTORHSKSBKB(0) As Byte
WCOKSKSQCD(12) As Byte
WCMCKMSKCD(3) As Byte
WCMCKMZCCD(1) As Byte
WCMEISSBKB(0) As Byte
WCSAGYDT(7) As Byte
WCNTMIJNKB(1) As Byte
WCOKRJSSSMKB(0) As Byte
WCUKEISKSKKB(0) As Byte
WCSHKADTSK(7) As Byte
WCGYOMKB(1) As Byte
WCGYOMSB(3) As Byte
WCSMKBSHKKNO(0) As Byte
WCSOHNKKNO(5) As Byte
WCSAGYFYKB(0) As Byte
End Type

Type WC272C
WCJE00 As JEW99A
WCHEDB21 As WC_HEDB21
WCHEDB22(4) As WC_HEDB22
WCHEDB23 As WC_HEDB23
WCMSAB21 As WC_MSAB21
WCMSAB22() As WC_MSAB22
End Type

Public pbuWC272C(1) As WC272C


Type WC272WC
WCJE00 As JEW99A
WCHEDB21 As WC_HEDB21
WCHEDB22(4) As WC_HEDB22
WCHEDB23 As WC_HEDB23
WCMSAB21 As WC_MSAB21
WCMSAB22(119) As WC_MSAB22
End Type

Public pbuWC272WC As WC272WC
-------------------------------------------

補足日時:2003/05/09 11:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報