現在、VC++.NETでDLLを作成中です。
EXE側でLoadLibraly関数を使ってDLL関数を呼び出しています。
DLL側では、char*型引数で渡って来たアドレスに、char型のデータの先頭アドレスを入れて呼び元にデータを返そうとしているんですが、うまく帰りません。
どうしたら、上位にデータを返せますか?
DLL内の動き
int 関数名(char* data){
char kekka[224];
data = &kekka[0];
}
> DLL内の動き
> int 関数名(char* data){
> char kekka[224];
>
> data = &kekka[0];
> }
今までプログラミングしていたであろう他の関数も、
この様にアドレスを返すように作っていたのでしょうか?
もしそれで動いていたというのであれば、単に運が良かっただけです。
ローカル変数の寿命はそのブロックを抜けるまでです。
この場合、関数を抜けた時点でkekka[224]の内容は保証されなくなります。
malloc等でメモリを確保し
そのアドレスを返す(もちろん不要になった時に解放が必要)か、
呼び出し側で結果を受け取るためのメモリを用意しそこに書き込むようにする必要があります。
返答ありがとうございます。
呼び出し側に書き込むようにします。
ありがとうございました。