- ベストアンサー
変数の値がおかしくなる
以下のようなプログラム(DLLとEXE)を書いたのですが、変数の値がおかしくなる(●参照)箇所があります。原因がお分かりになりましたら、ご回答をよろしくお願い致します。 ●mkdll.cppの、sub1()の(※1)までは、input[]が正しい値で入っているが、(※2)で値がおかしくなる。(※1)から(※2)までで、input[]は参照するだけです。 ---test.cpp(EXE)--- … main(){ int input[10],output[10]; int err; CDLL DLL; err = DLL.func(input,output); … return(0); } ---test.cpp End--- ---mkdll.h(DLL)--- … class __declspec(dllexport) CDLL{ public: int func(int *input, int *output); private: int sub1(int *input, int *output); int sub2(int in, int out); … }; ---mkdll.h End--- ---mkdll.cpp(DLL)--- #include "mkdll.h" … int CDLL::func(int *input, int*output){ int i; int error; error = sub1(input, output); return(error); } int CDLL::sub1(int *input, int *outout){ int i; int in1, in2, out1, out2; int err; //(※1) for(i=0; i<5; i++){ err = 0; in1 = input[i*2]; in2 = input[i*2+1]; //(※2) err = sub2(in1, out1); if(err != 0) return(err); … } } … ---mkdll.cpp End---
- みんなの回答 (5)
- 専門家の回答
お礼
ご回答、ありがとうございました。そして、ソースを省略しすぎて大変申し訳ありませんでした。 結論から言いますと、おっしゃる通り、切り分け作業でコードをどんどん削除している中で、問題は解決しました。ただ、思いもよらない、というか、今でも何故それで解決したのか不明なのですが。 どのようなものかというと、EXEを作成するソースに、DLLからインポートするクラスのprivate変数を記述すると、問題が解決しました。インポートする側からはpublicだけ書いておけば良いと思っていたのですが…。 多分に、"たまたま"解決しただけの感もあるのですが(汗)、とりあえず動作するものを作るのが第一優先だったので、とても助かりました。ありがとうございました。