0

データベース ライブラリのいくつかのコードを変更しています。仕組みとしては、void ポインターを送信し、そのサイズを取得するためにクエリを呼び出し、そのクエリを使用して構造体のサイズを計算します。問題は、構造体をパラメーターとして受け取りますが、最初のフェッチの前/途中で関数が失敗することです。その後、構造をクリアする必要がありますが、サイズさえありません。構造体のサイズをパラメーターとして送信するのが最善の方法であることはわかっていますが、すでに何千ものプログラムがコンパイルされています。ライブラリは 1996 年のものなので、型が void であっても構造体のサイズを計算する方法を見つける必要があります。 .

私が持っていた1つのアイデアは、構造にない次の要素の位置を計算することでした

0x000010              0x000042
[int|char[30]|int|int][int]

0x00042-0x000010 が 32 なので、サイズは 32 です。

私がいつ構造から抜け出したかを知る方法はありますか?

関数のプロトタイプは

int getData(char* fields, void* myStruct)

構造のサイズを調べる必要があります。

コードが巨大で、残念ながらここに投稿することはできません。

4

1 に答える 1

5

いいえ、一般に、 が与えられたvoid *場合、あなたが求めているものを理解する方法はありません。あなたができる唯一のことはNULL、それを と比較することですが、もちろんここでは役に立ちません。

void *には、を指していると言っても何もないことに注意してくださいstruct。配列の中央を指している可能性もあります。

に渡される前にポインターを記録するグローバルな手段がある場合はgetData()、ポインター値を以前に記録されたものと単純に比較するルックアップ関数を実装できる場合がありますが、それはポインター値をキーとして使用しているだけです。

于 2012-06-13T14:07:34.547 に答える