2009-06-24 8 views
2

誰も私に教えてくださいどのように格納し、文字列のリストを返すことができます。私は文字列のコレクションを返す関数を書かれているので返す方法Cの文字列のリスト#

は、私はこれを尋ねたと私は

そのいずれかのCOMを準備し、

に(返されたリストを取得するために)そのCOMを消費する必要があるにしたいです

vC++ここでは、その文字列のリストを使っていくつかの機能を拡張することができます。

私はthiusは明らかだろう願っています...事前に

おかげ

+0

してください - ちょうど「リストを作成オーデル永久保存/そのリストを返す "?方法の結果と同様に「戻る」? –

+4

あなたの言いたいことは本当に不明です。どちらかといえば、あなたの意図に応じて、単純に単純な、あるいは信じられないほど深い... –

+0

more input please、 達成したいことは何ですか? 擬似コードが助けになる –

答えて

11

List<string>または文字列[]は最高のオプションです。ここで

は、文字列のリストを返すサンプルメソッドです:

public static List<string> GetCities() 
{ 
    List<string> cities = new List<string>(); 
    cities.Add("Istanbul"); 
    cities.Add("Athens"); 
    cities.Add("Sofia"); 
    return cities; 
} 
+0

私は同じようにしました。しかし、私はこれのためのCOMを準備して取得したい 私はこの返されたvalues.Butを使用する必要があるC + +の戻り値は、GetCities(例として)は、対応するインターフェイスのメソッドではないというgetingエラーです。 – Cute

3

あなたは配列として文字列の固定リストを格納することができます:List<string>として

string[] myStrings = {"Hello", "World"}; 

または動的リスト:

List<string> myStrings = new List<string>(); 
myStrings.Add("Hello"); 
myStrings.Add("World"); 
3

C#では、単にList<string>を返すことができますが、ret代わりに怠惰な評価を可能にするため、urn IEnumerable<string>を使用してください。

+1

(遅れた評価は、遅延ソースによってサポートされている場合にのみ実際に役立ちます) –

+0

@Marc:確かに、リストを返すと、レイジーソースでもオプションはありません。 –

+1

@Marc - または、怠け者のソースに切り替えるオプションを将来的に望む場合:) –

1

昨日、COM interop経由でこれを行う方法を尋ねました。なぜ後ろにステップ?

How to return a collection of strings from C# to C++ via COM interop

+0

私は昨日尋ねた質問をチェックするようにユーザーに思い出させるためのダウンボートを手に入れましたか?すばらしいです。 –

+0

まだ私は "COM"を通してこれをやろうとしています。しかし私は自分のやり方を知っていますか? – Cute

0
public static IList<string> GetStrings() 
{ 
    foreach(var item in GetStringItems()) 
    yield return item; 
} 
2

は、.NETの文字列のリスト、リスト<文字列> slickestであることを表現する多くの方法があります。しかし、あなたはCOMにこれを返すことができない:COMは、.NETジェネリックを理解していない

  1. FxCopのは、それが何かの内部実装を返すように悪い習慣だと(リスト)を教えてくれます

    抽象的なインターフェイス(IList/IEnumerable)ではありません。

あなたが本当に怖いバリアントのSafeArrayオブジェクト(推奨されません)に取得したい場合を除き、あなたはあなたのCOMクライアントが文字列を列挙することができるように「コレクション」オブジェクトを作成する必要があります。このような

何か(コンパイルされていない - これはあなたが始めるために単なる一例です):より多くの情報を提供

[COMVisible(true)] 
public class CollectionOfStrings 
{ 
    IEnumerator<string> m_enum; 
    int m_count; 

    public CollectionOfStrings(IEnumerable<string> list) 
    { 
    m_enum = list.GetEnumerator(); 
    m_count = list.Count; 
    } 

    public int HowMany() { return m_count; } 

    public bool MoveNext() { return m_enum.MoveNext(); } 

    public string GetCurrent() { return m_enum.Current; } 
} 

http://msdn.microsoft.com/en-us/library/bb352856.aspx for more helpを参照)

関連する問題