解決済み

2ギガぐらい扱えるデータ型

  • 困ってます
  • 質問No.295398
  • 閲覧数122
  • ありがとう数5
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 85% (136/160)

C作成のDLLから引数で文字列を返すのですが
呼び出し元はVBで引数String型なので
2ギガまで文字列が格納できるのですが
Cの方がそのような大きなデータを扱えず
内部エラーになり困っております。
CのDLLは複数の文字列を連続取得して
ひとつの文字列にして返すという仕様です。
できたら今の仕様のままいきたいのですが
もし他に代替案がありましたら
そちらのほうもアドバイスいただきたいとおもいます。

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

  • 回答No.1

ベストアンサー率 37% (331/872)

こんにちは、honiyonです。

 大胆な仕様ですね笑

 malloc で 2Gbyteとれませんか?
 32bit環境だったらいけた気がしますが、ちょっと自信はありません。

 もしそれが無理ならば、ストリーム形式をとるのが良い感じだと思います。(fopenのようなもの)
 例えば、 StrReady; で文字列の送信を用意させ、 StrRead(Buf, sizeof(Buf));といった形で、指定されたバイト数を Bufに格納する。といった形です。
 開発する側としては面倒な仕様ですが、後々の事を考えるとこうしておけば柔軟に扱えると思います。

 参考になれば幸いです(..
お礼コメント
nekosuzu

お礼率 85% (136/160)

ご回答ありがとうございます。
malloc()または
char a[max]で
領域を確保しようとおもいます。
いろいろネットでもみたんですが
Cってメモリ管理結構大変なんですね
今まで気にしたことがなかったので
びっくりです。

まぁ2Gのデータを扱うことはないとおもいますが
VBのStringが2Gまで扱えるということで
書いてみました。

VBより検索パラメタをわたし
実際はCでTCP/IPの電文送受信
その電文のデータ部をひとつにつなげて
VBに返すというものを作成しています。
すこしデータ数が多くなるだけでおちるので
(現在40k程度でおちてます)
もう少し取る方法がないものか
模索しておりましたところです(^^;;;

初Cでソケットはちときついですが(泣き言)
もうすこしがんばります
本当にありがとうございました
投稿日時 - 2002-06-20 15:20:23
感謝経済、優待交換9月20日スタート

その他の回答 (全2件)

  • 回答No.3

ベストアンサー率 34% (574/1662)

将来のことはわかりませんが、現在のパソコンでやるには豪快というようり無茶苦茶な仕様ですね(^^;;

そもそも何のためにそんなことをしているのか判らないので、代替案の出し様もありません。

現実的にはファイルを使うのでしょうが、それでも2Gを必要とするような仕様は現実的ではありませんね。

少し前に戻って何をしたいのかをはっきりさせ、
その為にはどういうのが実際使う上で不都合が生じ難いか考え直すべきでしょう。

いえ、お願いですから,そういう無茶な仕様を考えるのは止めてください(^^;;
お礼コメント
nekosuzu

お礼率 85% (136/160)

アドバイスありがとうございます。

実際の連携部の仕様をかいつまんでかきますと
VBから検索のパラメタをCのDLLにわたし
CのDLLはTCP/IPで電文を送信
クエリ結果がいくつかの応答電文でかえってくるので
応答電文のデータ部をひとつにつなげて
VBにかえすというものです

本番データを確認しましたら十分見積もって
150kぐらいあればなんとかいけそうな感じです。
現在45kぐらいで落ちてしまうので
もう少し取得できないものかと
模索しておりました。

質問を簡略に書きすぎて
伝わりにくくなってしまって
ご迷惑をおかけしました。

本当にありがとうございました。
投稿日時 - 2002-06-20 15:42:56
  • 回答No.2

ベストアンサー率 65% (1020/1553)

#1の方と同様、豪快な仕様だと思います。

で、はっきり言って、アウトです。
32bitアプリではメモリ空間は4Gまで使用可能ですが、その中で使用できない分があったりしますので、VBで2G、DLLで2Gなんて事をしたら間違いなくメモリ不足で落ちます。

どうしてもまとめて取りたいのであれば、ファイルに書くのが現実的だと思います。
NTFSでフォーマットされているのであれば、ギガなんて単位よりずっと大きなサイズでも扱えますし。
お礼コメント
nekosuzu

お礼率 85% (136/160)

アドバイスありがとうございます。

たぶん2Gのデータを扱うということは
ないので大丈夫だとおもいます
(現本番データだと150kぐらい
あればいい感じです)
現在45kぐらいでABENDしてるため
困っておりました。
malloc()でとりあえず明示的に
領域を確保してやりたいとおもいます。

いろいろ複雑な処理をしてるので
質問を省略してかこうとして省略しすぎてしまったようで
伝わりにくくてご迷惑をおかけいたしました。
投稿日時 - 2002-06-20 15:27:14
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ