DLL を動的に使用するメイン プログラム (PMAIN) があります。PMAIN が、DLL によってエクスポートされた 2 つの関数 (foo1、foo2、および foo3) を使用するとします。関数は次のようなものです。
int __stdcall foo1(){
str = new MyStruct;
}
int __stdcall foo2(){
str.LC->objF1();
}
int __stdcall foo3(int val){
str.LC->objF2(val);
}
MyStruct は次のようになります。
struct MyStruct{
MyObject LC
}
MyObject は次のとおりです。
class MyObject{
private:
int arr1[100];
int arr2[100];
int Index;
public:
MyObject();
~MyObject();
void objF1();
void objF2(int val);
}
void MyObject::objF1(){
for(int i=0;i<100;i++){
arr1[i]=1;
}
}
void MyObject::objF2(int val){
Index++;
arr2[Index]=val;
}
MyObject::MyObject(){
for(int i=0;i<100;i++){
arr1[i]=0;
arr2[i]=0;
}
Index=-1;
}
PMAIN から、最初にfoo1を呼び出し、次に foo2 を呼び出し、次にfoo3を 100 回呼び出します。配列arr1は正しく更新され、PMAIN の実行全体で値を「保持」しますが、foo3 を呼び出すたびに、配列arr2には更新されるゼロのみが含まれ、プログラムがfoo3をもう一度呼び出すと、再び空白になります。PMAIN が DLL 内の配列のアドレスを上書きする方法 (デバッグを実行しているときにこの動作が見られました)。
どうすればそれが可能か知っていますか?
PMAIN と DLL は、メモリ内の 2 つの異なる場所にあるはずではありませんか?