0

文字列型を BSTR* 型にマーシャリングする方法を考えていました。詳しく説明すると、C++ の構造は次のとおりです。

struct MyStruct
{
     BSTR* string;
     int a;
}

C# 側で新しい sturct を定義する必要があります。string[] と IntPtr[] の両方を試しましたが、成功しませんでした。

ご協力いただきありがとうございます!

編集: C++ 構造:

    struct HTTPTEXTRENDERERFILTERINFO {
        enum { UTC, GMT } eTimestamp;
        BOOL    bEnableCCIngest;
        LONG    lQueueSizeTreshold; 
        LONG    lSendTimeTreshold;  
        BYTE    btBroadcastUrlCount;
        BSTR*   pbstrBroadcastUrls;                                
        LONG    lInputPinsNum;      
    };

関数のプロトタイプ:

HRESULT HTTPTextRendererFilter::SetConfig(IN const HTTPTEXTRENDERERFILTERINFO& Config)

c# 構造:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct HttpTextRenderFilterInfo { public enum TimestampType : int { UTC, GMT };

    public TimestampType Timestamp;
    public int EnableCCIngest;
    public int QueueSizeTreshold; 
    public int SendTimeTreshold;  
    public byte BroadcastUrlCount;
    [MarshalAs(UnmanagedType.BStr)]
    public string pbstrBroadcastUrls;        
    public int lInputPinsNum;     
};

プロトタイプ:

    [PreserveSig]
    int SetConfig([In] ref HttpTextRenderFilterInfo config);
4

1 に答える 1

1

これを試して:

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
struct MyStruct
{
   [MarshalAs(UnmanagedType.BStr)] public String myString;
   public int a;
}
于 2012-08-15T06:29:13.823 に答える