如何将COleDateTime对象列表作为SAFEARRAY *

时间:2017-01-03 19:04:45

标签: c# c++ datetime mfc safearray

这是我的方法定义:

IMSAToolsLibraryInterface : IUnknown
{
    //
    // Raw methods provided by interface
    //

      virtual HRESULT __stdcall SetPathXML (
        /*[in]*/ BSTR strPathXML,
        /*[out]*/ __int64 * iResult ) = 0;
      virtual HRESULT __stdcall SavePublisherData (
        /*[out]*/ __int64 * iResult ) = 0;
      virtual HRESULT __stdcall ReadPublisherData (
        /*[out]*/ __int64 * iResult ) = 0;
      virtual HRESULT __stdcall Test ( ) = 0;
      virtual HRESULT __stdcall AddPublisher (
        /*[in]*/ BSTR strName,
        /*[in]*/ BSTR strNotes,
        /*[in]*/ enum Gender eGender,
        /*[in]*/ enum Appointed eAppointedAs,
        /*[in]*/ enum Serving eServingAs,
        /*[in]*/ VARIANT_BOOL bUseForDemonstrations,
        /*[in]*/ VARIANT_BOOL bAvailableMidweek,
        /*[in]*/ VARIANT_BOOL bAvailableWeekend,
        /*[in]*/ SAFEARRAY * listDatesNotAvailable ) = 0;
};

它现在有一个新的last参数,它实际上是C#DLL方法中的DateTime对象数组。我已经阅读了一些关于这个主题的内容,似乎从MFC我需要使用COleSafeArray来创建一个合适条目的安全数组。

令我困惑。我基本上希望能够将COleDateTime值列表作为此SAFEARRAY*参数传递,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

COleSafeArray arr;
arr.CreateOneDim(VT_DATE, num_elements);

DATE* data;
arr.AccessData((void**)&data);
data[0] = my_date;
// Assign other elements as needed
arr.UnaccessData();

my_itf_pointer->AddPublisher(..., arr.parray);