0
C++プロジェクトにプラグインを書き込むと、管理された.NETコードでC関数を公開できるUnmanagedExports Nugetパッケージを利用しています。 https://www.nuget.org/packages/UnmanagedExportsStringBuilderを使用してpinvoke char * []を無効にする
Iは以下 私は仕事このために定義したUnmanagedExport方法である(Cでのchar *として定義++)は、文字列を受信し、プラグインを作成しました。
[DllExport("GetString", CallingConvention = CallingConvention.Cdecl)]
public static void GetString(StringBuilder MyString)
{
//Use and modify the StringBuilder. It receives the string passed and returns the modified version because it is being passed by reference.
}
上記のコードは美しく実行されます。
ここで問題は、UnmanagedExportコードに文字列配列を渡すことができることです。 C++は呼び出しにchar * []を要求すると定義しています
これは機能しません。
[DllExport("GetString", CallingConvention = CallingConvention.Cdecl)]
public static void GetString(StringBuilder[] MyString)
{
}
ゴールデンルールは、同じ引数をとり、printf()でその値を表示するC関数を最初に書くことです。あなたは完全に問題を発見することが保証されています:*配列の長さ?*あなたは知らない、C#は知らない、Gieseckeは知らない。アンマネージドコードをまだ十分に理解していない場合は、そのステップをスキップしないでください。 –
@ HansPassant入力が正しい方向に向いてくれてありがとう。私は以下の私の答えを追加しましたが、これは私に文字列の配列を渡すことができます。配列の変更は、変更されても呼び出し元コードに反映されません。 – CathalMF