VB2010からVCが受け取る配列のアドレスについて
Posted: 2016年5月20日(金) 16:57
初めまして、よろしくお願いします。
VC++6で作成されたOCXをVC2010用に修正して、そのOCXをVB2010で使用しています。
その際、配列の最初の要素のアドレスを受け取っているのですが、その次の要素のアドレスをどのように取得すればよいのか、わかりません。
VC++6では、以下のように処理していました。
// lXとlYに、配列要素の先頭アドレスが渡ってきます。
// lX[0] = 1000、lX[1] = 2000、lY[0] = 1500、lY[1] = 2500のようにVB側でしている場合、
// Searchs( lx(0), ly(0) ) のようにして呼び出しています。
short Searchs(long FAR* lX, long FAR *lY)
{
CPoint Pos1, Pos2; // Pos1に要素0、Pos2に要素1の各値を設定したい
Pos1.x = *lX;
Pos1.y = *lY;
lX++;
lY++;
Pos2.x = *lX;
Pos2.y = *lY;
// 以下の処理は省略
}
上記処理だと、次の要素のアドレスが4バイト先にあることになります。以前VB6でこのVC++6のOCXを使用していた場合は問題ありませんでした。VC2010ではこのような処理では次の要素は取得できないということでよろしいでしょうか?
また、配列の最初の要素と次の要素のアドレスを比べたところ、最初の配列から24バイト先に次の配列の要素がありました。この24バイトというのは固定でしょうか?そして、24バイトというのはどういった理由からなのでしょうか?
VC++6で作成されたOCXをVC2010用に修正して、そのOCXをVB2010で使用しています。
その際、配列の最初の要素のアドレスを受け取っているのですが、その次の要素のアドレスをどのように取得すればよいのか、わかりません。
VC++6では、以下のように処理していました。
// lXとlYに、配列要素の先頭アドレスが渡ってきます。
// lX[0] = 1000、lX[1] = 2000、lY[0] = 1500、lY[1] = 2500のようにVB側でしている場合、
// Searchs( lx(0), ly(0) ) のようにして呼び出しています。
short Searchs(long FAR* lX, long FAR *lY)
{
CPoint Pos1, Pos2; // Pos1に要素0、Pos2に要素1の各値を設定したい
Pos1.x = *lX;
Pos1.y = *lY;
lX++;
lY++;
Pos2.x = *lX;
Pos2.y = *lY;
// 以下の処理は省略
}
上記処理だと、次の要素のアドレスが4バイト先にあることになります。以前VB6でこのVC++6のOCXを使用していた場合は問題ありませんでした。VC2010ではこのような処理では次の要素は取得できないということでよろしいでしょうか?
また、配列の最初の要素と次の要素のアドレスを比べたところ、最初の配列から24バイト先に次の配列の要素がありました。この24バイトというのは固定でしょうか?そして、24バイトというのはどういった理由からなのでしょうか?