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  }