バイトを組み合わせてデータを「エンコード」するのは単なる方法ですか?COM文字列(BSTR)と.NET文字列の違いは何ですか?
RCWが自動的に.NET文字列を受け取り、それをCOM BSTRに変換する方法が不思議です。私はそれがちょうど.NET文字列から変換された有効なCOM BSTRを形成すると推測しています。
関連:.NETでバイトタイプを使用して自分の有効なBSTRを構築できますか?
バイトを組み合わせてデータを「エンコード」するのは単なる方法ですか?COM文字列(BSTR)と.NET文字列の違いは何ですか?
RCWが自動的に.NET文字列を受け取り、それをCOM BSTRに変換する方法が不思議です。私はそれがちょうど.NET文字列から変換された有効なCOM BSTRを形成すると推測しています。
関連:.NETでバイトタイプを使用して自分の有効なBSTRを構築できますか?
2つの文字列型はまったく関係ありません。あるタイプを別のタイプに変換するには、変換が必要です。
BSTRには、SysAllocString *を介して割り当て、SysFreeStringで割り当て解除する、長さ接頭辞を持つ、および2つのヌル文字のターミネータを含むことに従わなければならない多数の規則があります。
http://msdn.microsoft.com/en-us/library/ms221069.aspx
純列は、管理ヒープを介して割り当てられている管理型です。ライフタイムはCLRガベージコレクタによって管理されます。
おかげでjoncham:それは十分にあなたがSysAllocStringのPInvokeできる良いではない場合
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.stringtobstr.aspx
:
は、使用することをMarshal.StringToBSTRずっと良いだろうあなた自身のBSTRを構築するために。非常に役立ちます。私はちょうど私がビットとバイトを調べれば、違いがどうなるのだろうかと思っています。彼らはどちらもどこかに格納されます。彼らはどちらも何かを表しています。同じもの(文字列ですか?)を表現するのに異なるビットとバイトではありませんか? – richardはい、すべてのデータは単なるバイトです;-)。問題は、それらのバイトを割り当てる/解放する人と、それらのバイトをレイアウトするときに使用される規則です。たとえば、BSTRを割り当てるときには、実際に割り当てられたメモリの先頭へのポインタを取得しません。最初の4バイトは文字列の長さを格納するため、ポインタは割り当てられたスペースに4バイトです。 – joncham
@Richard DesLonde:確かに、どちらも文字の配列です。しかし、 'System.String'のコンストラクタは文字配列を別のメモリ位置にコピーするので、本当に文字列を' System.String'として使用することはできません。 – codekaizen