github.com/go-ole/go-ole@v1.2.6/safearray_test.go (about) 1 package ole 2 3 // This tests more than one function. It tests all of the functions needed in 4 // order to retrieve an SafeArray populated with Strings. 5 func Example_safeArrayGetElementString() { 6 CoInitialize(0) 7 defer CoUninitialize() 8 9 clsid, err := CLSIDFromProgID("QBXMLRP2.RequestProcessor.1") 10 if err != nil { 11 if err.(*OleError).Code() == CO_E_CLASSSTRING { 12 return 13 } 14 } 15 16 unknown, err := CreateInstance(clsid, IID_IUnknown) 17 if err != nil { 18 return 19 } 20 defer unknown.Release() 21 22 dispatch, err := unknown.QueryInterface(IID_IDispatch) 23 if err != nil { 24 return 25 } 26 27 var dispid []int32 28 dispid, err = dispatch.GetIDsOfName([]string{"OpenConnection2"}) 29 if err != nil { 30 return 31 } 32 33 var result *VARIANT 34 _, err = dispatch.Invoke(dispid[0], DISPATCH_METHOD, "", "Test Application 1", 1) 35 if err != nil { 36 return 37 } 38 39 dispid, err = dispatch.GetIDsOfName([]string{"BeginSession"}) 40 if err != nil { 41 return 42 } 43 44 result, err = dispatch.Invoke(dispid[0], DISPATCH_METHOD, "", 2) 45 if err != nil { 46 return 47 } 48 49 ticket := result.ToString() 50 51 dispid, err = dispatch.GetIDsOfName([]string{"QBXMLVersionsForSession"}) 52 if err != nil { 53 return 54 } 55 56 result, err = dispatch.Invoke(dispid[0], DISPATCH_PROPERTYGET, ticket) 57 if err != nil { 58 return 59 } 60 61 // Where the real tests begin. 62 var qbXMLVersions *SafeArray 63 var qbXmlVersionStrings []string 64 qbXMLVersions = result.ToArray().Array 65 66 // Get array bounds 67 var LowerBounds int32 68 var UpperBounds int32 69 LowerBounds, err = safeArrayGetLBound(qbXMLVersions, 1) 70 if err != nil { 71 return 72 } 73 74 UpperBounds, err = safeArrayGetUBound(qbXMLVersions, 1) 75 if err != nil { 76 return 77 } 78 79 totalElements := UpperBounds - LowerBounds + 1 80 qbXmlVersionStrings = make([]string, totalElements) 81 82 for i := int32(0); i < totalElements; i++ { 83 qbXmlVersionStrings[i], _ = safeArrayGetElementString(qbXMLVersions, i) 84 } 85 86 // Release Safe Array memory 87 safeArrayDestroy(qbXMLVersions) 88 89 dispid, err = dispatch.GetIDsOfName([]string{"EndSession"}) 90 if err != nil { 91 return 92 } 93 94 _, err = dispatch.Invoke(dispid[0], DISPATCH_METHOD, ticket) 95 if err != nil { 96 return 97 } 98 99 dispid, err = dispatch.GetIDsOfName([]string{"CloseConnection"}) 100 if err != nil { 101 return 102 } 103 104 _, err = dispatch.Invoke(dispid[0], DISPATCH_METHOD) 105 if err != nil { 106 return 107 } 108 }