私はpcharを返す関数を持つDLLを持っています。私のDLLのDelphiでは、関数の戻りpcharを割り当てる必要があります
Result := pChar(SomeFuncThatReturnsString)
その私はもともとPChar型として文字列をキャストして返していました何をやっていた(borlndmmを使用する必要がないように、など)しかし、私は時間の予想結果の90%を取得し、私は戻ってになるだろう、他の回ました何もない。
私はpcharにメモリを割り当てる必要があると思っていました。私のオリジナルのやり方では、関数が元々呼び出されたときにあったものではないメモリへのpcharポイントがありました。だから私は今、この
Result := StrAlloc(128);
Strcopy(Result,PAnsiChar(Hash(Hash(Code,1,128),2,128)));
を持っている。しかしこれには、$ 64個の質問がされ、私は
StrDispose(Pstr);
を行うプログラムの最後に割り当てられたメモリをクリーンアップすることを私に残します:私が割り当てする必要がありますかDLL内の関数からPCharを返すときのメモリ、またはPCharにキャストできますか?
シャットダウン機能を公開しているのは、Windows 3.1がfdwReason = DLL_PROCESS_DETACHのときにDllMainのクリーンアップだけです。 –
それは私の答えと何が関係していますか?また、DllMain()では必ずしもクリーンアップが可能であるとは限りません。DllMain()の内部では安全に実行できない操作がいくつかあります。 –
"WEP(Windows終了プロシージャ)コールバック関数は、ライブラリがアンロードされる前にダイナミックリンクライブラリ(DLL)のクリーンアップを実行します。それはあなたが提案したものではありませんか?再:安全でない操作 - 例を与えるケア? –