BSTR型の配列ポインタのマーシャリングについて – プログラミング – Home

BSTR型の配列ポインタのマーシャリン...
 
通知
すべてクリア

[解決済] BSTR型の配列ポインタのマーシャリングについて


human
 human
(@human)
ゲスト
結合: 15年前
投稿: 26
Topic starter  

すみません。マーシャリングについて再度ご質問させてください。

アンマネージコードの

BSTR* AAA

というwchar_t型の配列ポインタをある関数の引数でもらってその関数内で

array<System::String^> BBB

のマネージコードのstring配列にマーシャリングしたいのですがMarshalの
メソッドを使えば出来ますでしょうか?

Marshal::PtrToStringUni

を使用すれば配列の1つ1つに対してマーシャリング出来るのですが配列の要素分
処理を書かなければならないので可能であれば一気にマーシャリング出来るやり
型を探しております。

ご教授お願いします。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>wchar_t型の配列ポインタ
ってどういうルールで配列の終わりを決めていますか?NULL?

どっちにせよSafeArrayみたいにいくつ配列があるかとかの情報を持っている型でないと
一気にはできないでしょう。

>配列の要素分処理を書かなければならない
とは?ループ処理でできない?


返信引用
human
 human
(@human)
ゲスト
結合: 15年前
投稿: 26
Topic starter  

>>Blueさん

お世話になります。

>>>wchar_t型の配列ポインタ
>>ってどういうルールで配列の終わりを決めていますか?NULL?

関数の引数でもう1つint型のパラメータをもらっていましてそれが配列の要素数
になります。

>>>配列の要素分処理を書かなければならない
>>とは?ループ処理でできない?

for(i =0; i < count; i++)
{
BBB[i] = Marshal::PtrToStringUni((IntPtr)AAA[i]);
}

で要素分のループをさせて処理出来ますがこれでも特に問題はございませんでし
ょうか?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

問題ないかと。

C++/CLIであれば、Marshal::PtrToStringUniを使わなくても、
wchar_t*をStringクラスのコンストラクタに渡せると思いますので、

array<System::String^>^ BBB = gcnew array<System::String^>(count);
for (i = 0; i < count; ++i) {
BBB[i] = gcnew String(AAA[i]);
}

でもできるかと。

動的配列でも可能なら

System::Collections::Generic::List<String^>^ B
= gcnew System::Collections::Generic::List<String^>();
for (i = 0; i < count; ++i) {
BBB[i].Add(String(AAA[i]));
}

って風にできます。


返信引用
human
 human
(@human)
ゲスト
結合: 15年前
投稿: 26
Topic starter  

>>C++/CLIであれば、Marshal::PtrToStringUniを使わなくても、
>>wchar_t*をStringクラスのコンストラクタに渡せると思いますので、

>>array<System::String^>^ BBB = gcnew array<System::String^>(count);
>>for (i = 0; i < count; ++i) {
>> BBB[i] = gcnew String(AAA[i]);
>>}
>>でもできるかと。
>>動的配列でも可能なら
>>System::Collections::Generic::List<String^>^ B
>> = gcnew System::Collections::Generic::List<String^>();
>>for (i = 0; i < count; ++i) {
>> BBB[i].Add(String(AAA[i]));
>>}

アドバイスありがとうございました。Marshal::PtrToStringUni以外にもやり方が
いろいろとあることが分かり大変参考になりました。

特に問題ないとのことでしたので今回はMarshal::PtrToStringUniにてマーシャリ
ングをしたいと思います。

また何かありましたらその節は宜しくお願い致します。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました