2017-01-03 5 views
0

Это мое определение метода:Как передать список объектов COleDateTime как 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; 
}; 

теперь имеет новый последний параметр, который является на самом деле массив объектов DateTime в методе C# DLL. Я немного почитал эту тему, и мне кажется, что от MFC мне нужно использовать COleSafeArray, чтобы создать безопасный массив подходящих записей.

Меня это смущает. Я в основном хочу иметь возможность передавать список значений COleDateTime как этот параметр SAFEARRAY*, и я не знаю, как это сделать.

+1

Возможно, вы захотите использовать тег C++; отношение к C# является тангенциальным в лучшем случае – BradleyDotNET

ответ

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); 
+0

Спасибо. Итак, если 'my_date' является литой переменной COleDateTime? –

+1

'COleDateTime' предоставляет' operator DATE() '. Неявный бросок должен работать. –