まず、私はC#プログラマです。したがって、私のC++に関する知識はかなり限られています。私は大学でそれを取り戻しましたが、10年後にそれに触れていないので、これが比較的単純なものであれば私を許してください。C++で2つのchar *を連結する関数
libwpdライブラリを実装するC#で使用できるDLLを作成しようとしています。
私はP/Invoke経由でアクセスできる2つの関数をエクスポートするDLLを作成することができました。最初は定数(Visual Studioによってサンプルとして生成されます)を返します.2番目の文字列です。
関数から定数の文字列を返すと、C#に正常に渡され、もう一方の端で読み取ることができるので、データが返されていることがわかります。
私が実行している問題は、libwpdです。私はTextDocumentGenerator.cppファイルを変更して、情報をchar *に追加する必要がありました。使用するprintfを使用するのではなく、後でアクセスすることができます。
ヘッダーファイルのパブリックセクションに変数定義を追加しました。これを呼び出しコードから読み取ることができます。
今、libwpdで与えられたchar *を外部char *に追加できるようにする関数を作成しようとしています。
私はこれを作ってみた:
char* addString(const char* addThis, char* toThis)
{
char* copier = (char*)malloc(strlen(toThis) + 1 + 1);
strcpy(copier, toThis);
strcpy(copier, "1");
toThis = (char*)malloc(strlen(copier) + 1);
strcpy(toThis, copier);
return copier;
}
しかし、私は戻って情報を渡すとき、私は空の文字列を取得します。
私はSTRCATするのstrcpyを変更した場合、私は
(私はそれだけで技術的に繰り返し文字列に「1」を追加する必要があります実現が、それはそれさえもをやっていない)totalFile = addString("\n", totalFile);
を呼び出すことにより、関数を呼び出しますコピー機のライン、それはロックアップ。
私はC++でプログラムを作成する方法を知らないので、何が起きているのかを見るために関数をステップすることさえできます。
ご協力いただければ幸いです。
'strcpy(複写機、toThis); strcpy(複写機、 "1"); ' - あるものについては、第2の' strcpy'が最初のファイルの結果を上書きします。 –
C++で 'malloc'を使用していると、ほとんどの場合間違っていることを意味します。 C++で 'new'を使って自分自身を見つけたら、それはあなたが何か間違っていることを意味するかもしれません。 'new'が必要となる共通のシナリオの多くは標準テンプレートライブラリにすでに用意されています。 – Brian
@Trevorフレンドリーなヒント:C++プロジェクトをC++/CLIとしてコンパイルすることをお勧めします。プロジェクトでは、ネイティブコード用のマネージラッパーを作成します。そうすれば、それはそれとのインターフェイスをより洗練されたものにします。いつものように参照を追加するだけで、ネイティブクラスへのアンマネージポインタを含むラッパーのマネージインスタンスを作成できます。 – Max