私はCOMオブジェクトへの動的メソッド呼び出しを持っています。.NET Byte Array COMキャストの問題
System.InvalidCastExceptionの::型のオブジェクトをキャストできません「System.Byte [*]」「System.Byte []は」を入力するために、私は[]バイトとして結果を返すしようとすると、私は次の例外を取得します
ご協力いただければ幸いです。
私はCOMオブジェクトへの動的メソッド呼び出しを持っています。.NET Byte Array COMキャストの問題
System.InvalidCastExceptionの::型のオブジェクトをキャストできません「System.Byte [*]」「System.Byte []は」を入力するために、私は[]バイトとして結果を返すしようとすると、私は次の例外を取得します
ご協力いただければ幸いです。
あなたの場合のCOMオブジェクトメソッドは、ゼロ以外の下限の配列を返しているようです。あなたは、通常のバイト配列を作成し、このような最初の配列からデータをコピーすることができます
var comArray = (Array)(object)comObject.CallToComObject();
byte[] data = new byte[comArray.Length];
Array.Copy(comArray, data, data.Length);
私はコピーを回避する方法があるかどうかわかりません。その後、非ゼロの下限配列は動的な方法で返された場合、私には未知の理由のため
、すなわち、CallToComObject
の署名がdynamic
戻り値の型を持っている、例外:
EDIT Array
としてキャストしようとするとスローされます。最初にobject
にキャスティングすると、この問題が解決するようです。どうしてか分かりません。
上記の2行目で失敗しました。以前に報告されたのと同じ例外があります。私はvar comArrayを持っていない、私は動的comArrayを持っています。 – c0D3l0g1c
@ c0D3l0g1c、答えを更新し、戻り値を 'object'にキャストしてから' Array'にキャストしようとしました。 –
チップのJon Skeetに感謝します。
問題が何であるか理解したら、解決策を見つけるまでに時間がかかりませんでした。この記事への感謝:https://weblog.west-wind.com/posts/2008/Aug/26/Accessing-a-SafeArray-Result-from-a-COM-Call-in-C
固定コード:ゼロ以外の下限を持つ配列を作成した場合に発生します
object fileData = _imageServerApplication.GetActualFile();
Array fileDataArray = (Array) fileData;
byte[] fileDataBytes = new byte[fileDataArray.Length];
fileDataArray.CopyTo(fileDataBytes, 0);
。 COMオブジェクトは何をしていますか? –
これは、ストレージプロバイダからbyte []配列としてドキュメントを取得しています。このCOMコンポーネントはブラックボックスです。ソースへのアクセス権がありません。これを修正する方法はありますか? – c0D3l0g1c