SWIG をいじって、unsidned char の typemaps で立ち往生しました。C# では、次の uint ポインターが byte[] として必要になります。
//C++
uint8_t* data;
//C#
ushort[] or byte[] data;
Python の場合、どのように見えるべきかいくつかのアイデアを見つけましたが、C# の実装には問題がありませんでした。誰かが方向性を提案してもらえますか? 前もって感謝します!
解決済み:
他の質問のマークに感謝しますが、明確な PI/Invoke または DLL のインポート用である重複しているとは思いません。私はSWIGでこれを行っており、DLLのインポートとポインタとは何の関係もありません(SWIGはそれ自体で行っています)。しかし、誰かが同じ問題を抱えている場合、私はいくつかの質問を思いつきました: まず、誰かがそれを試してみたい場合は、より多くのタイプマップを調べることができます:
%include "cpointer.i"
//%pointer_cast(unsigned char*,byte, convert_to_array)
また
%include "carrays.i"
//%array_functions(unsigned char, ushort);
彼らがどのように機能するのか確信が持てなかったので、ここに私の最終的な解決策があります:SWIG用のC++コンバーターを作成しました.coz SWIGはchar*を文字列に、または文字列を適切なライブラリで文字列に変換します:
C++ 変換コード
std::string ConvertData(uint8_t &data)
{
char* inner = (char*)malloc(sizeof(data));
std::string tmp ;
for (int i = 0; i < sizeof(data); i++)
{
sprintf(inner, "%02X ", data[i]);
tmp += inner;
return tmp;
}
最後にHEXとして使用されるため、フォーマットも必要でした。このフォーマットでは、実際のデータ バイトが大文字と空白で区切られた 2 文字に分割されます。
SWIG インターフェース ファイルを使用する場合、これを C++ ヘッダーの前に追加します。これは SWIG に std ライブラリを使用し、文字列を正しく使用するように指示します。文字列の代わりに char* を使用する他のオプションと SWIG も文字列を返します。
%include "std_string.i"
次に、C# または任意の言語で、必要に応じて文字列を使用できます。空白があった文字列配列に解析しました。
C#
string[] tmp = ConvertData(parsedStringFromCPP).Split(' ');
希望は他の誰かにも役立ちます。乾杯