Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 5th, 2012  |  syntax: None  |  size: 1.38 KB  |  hits: 8  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. COM interop: how to use ICustomMarshaler to call 3rd party component
  2. long GetPrecursorInfoFromScanNum(long nScanNumber,
  3. LPVARIANT pvarPrecursorInfos,
  4. LPLONG pnArraySize)
  5.        
  6. struct PrecursorInfo
  7. {
  8.     double dIsolationMass;
  9.     double dMonoIsoMass;
  10.     long nChargeState;
  11.     long nScanNumber;
  12. };
  13.  
  14. void CTestOCXDlg::OnOpenParentScansOcx()
  15. {
  16.     VARIANT vPrecursorInfos;
  17.     VariantInit(&vPrecursorInfos);
  18.     long nPrecursorInfos = 0;
  19.  
  20.     m_Rawfile.GetPrecursorInfoFromScanNum(m_nScanNumber,
  21.         &vPrecursorInfos,
  22.         &nPrecursorInfos);
  23.  
  24.     // Access the safearray buffer
  25.     BYTE* pData;
  26.     SafeArrayAccessData(vPrecursorInfos.parray, (void**)&pData);
  27.     for (int i=0; i < nPrecursorInfos; ++i)
  28.     {
  29.         // Copy the scan information from the safearray buffer
  30.         PrecursorInfo info;
  31.         memcpy(&info,
  32.         pData + i * sizeof(MS_PrecursorInfo),
  33.         sizeof(PrecursorInfo));
  34.     }
  35.     SafeArrayUnaccessData(vPrecursorInfos.parray);
  36. }
  37.        
  38. void GetPrecursorInfoFromScanNum(int nScanNumber, ref object pvarPrecursorInfos, ref int pnArraySize);
  39.        
  40. [Guid("06F53853-E43C-4F30-9E5F-D1B3668F0C3C")]
  41. [TypeLibType(4160)]
  42. [ComImport]
  43. public interface IInterfaceNew : IInterfaceOrig
  44. {
  45.     [DispId(130)]
  46.     int GetPrecursorInfoFromScanNum(int nScanNumber, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(MyMarshaler))] ref object pvarPrecursorInfos, ref int pnArraySize);
  47. }