私は入力char *を取り込み、いくつかの変換操作を実行した後に出力char *を割り当てるCスタイルのDLLインターフェイスを作成しようとしています。関数の戻り値はエラーコードなので、char *を返すためには使用されません。DLLメソッドでCの文字列を返す
私は、このように関数を呼び出す:
char* output;
myfunc((char *) input.c_str(), &output);
そして、関数が次のように定義されます
DLL_EXPORT int myfunc(char* input, char** output)
{
string translation = translate(input);
*output = (char *) malloc((translation.length()+1)*sizeof(char));
strcpy(*output,(char *) translation.c_str());
}
が、これは、これを実現するための正しい方法は何ですか?私はメモリリークを作りますか?
Huh?同じDLLをロードしている複数のプロセス間でメモリを共有することは、1つのプロセス内で起こりうるメモリリークとは関係ありません。 –
@Adam Rosenfieldは複数のプロセスについて何か言っていましたか?あなたはdllでメモリ割り当てを行い、それをプロセスで使用することを安全と想定していますか?これまで注射DLLを使ってみましたか? – Ulterior
リンクされた記事の最初の文は次のとおりです。 "次の例は、DLLエントリポイント関数がファイルマッピングオブジェクトを使用して** DLLをロードするプロセスによって**共有できるメモリを設定する方法を示しています**"(emphasis mine )。はい、それは完全に安全ですDLL内のメモリを割り当てると、*プロセスで*使用します。それはなぜではないでしょうか?危険なのは、別のモジュールによって割り当てられた1つのモジュールで*メモリの割り当てを解除しようとするときです。リンク先の記事を参照してください。これとDLL注入は何をしなければなりませんか? –