17,740
社区成员
发帖
与我相关
我的任务
分享
interface INvrProxy : IDispatch{
[id(1), helpstring("test")] HRESULT TestStruct([in] VARIANT* variantIn, [out] int* result);
};
struct Time
{
DWORD hour;
DWORD min;
DWORD sec;
};
STDMETHODIMP CNvrProxy::TestStruct2(VARIANT* variantIn, int* result)
{
try
{
HRESULT hr;
SAFEARRAY* psaStru = variantIn->parray;
Time *pTime = NULL;
Time time;
hr = SafeArrayAccessData(psaStru, reinterpret_cast<PVOID*>(&pTime));
time = *pTime;
hr = SafeArrayUnaccessData(psaStru);
SafeArrayDestroy(psaStru);
*result = (int)time.hour;
}
catch (...)
{
*result = -1;
}
return S_OK;
}
[StructLayoutAttribute(LayoutKind.Sequential, Pack = 1)]
struct Time
{
public uint hour;
public uint min;
public uint sec;
}
Time time;
time.hour = 9;
time.min = 31;
time.sec = 12;
int size = Marshal.SizeOf(time);
IntPtr pInput = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(time, pInput, false);
int ret = 0;
object obj = pInput;
try
{
mNvrProxy.TestStruct(ref obj, out ret);
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
int size = Marshal.SizeOf(time);
IntPtr pInput = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(time, pInput, false);
IntPtr pInput2 = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(time, pInput2, false);
IntPtr[] pInputs = new IntPtr[2] { pInput, pInput2 };
int ret = 0;
object obj = pInputs;
try
{
mNvrProxy.TestStruct3(ref obj, out ret);
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}