0
public struct Data
{
    public long id,
    public datetime time;
    public string[] atts;
    public string[] names;
};

Guid("3102C9D3-822E-4359-9383-9B3AF7D39F2C")]
public interface IData  
{
    void GetEvents([MarshalAs(UnmanagedType.LPArray)]out DataResp[] resp);
}

複雑な構造体をC#からc ++コンポーネントに渡したり受け取ったりして、c++に入力したいと思います。クライアントコードは次のようになります

Lib::Data* data;
long size = svc->GetEvents(&data); 
for(size_t i = 0; i < size; ++i) 
{  
Lib::Data& current = data[i];   
long val = current.Value;  
bstr_t unit = current.Unit;  

誰かがc++から文字列配列を読み取る方法と日時をマーシャリングする方法を教えてくれますか?

4

1 に答える 1

0

そうしているうちに、いくつかの問題に直面します。ほとんどの場合、いくつかの属性で構造体を装飾する必要があります。

文字列を渡すには、十分な Stringbuilder を使用して、C++ が期待するサイズの文字列を作成することをお勧めします。

私が何度か直面したもう 1 つの問題は、梱包です。構造の配置を変更します。解決するには、適切な属性を指定して、構造体が順番に配置されていることを確認する必要があります。

さらに、ポインターを渡す必要がある場合は、渡す前にオブジェクトを固定してください。そうしないと、ランタイムによって変更されます。

于 2012-09-29T10:46:39.347 に答える