03-22-2013, 02:48 PM
I have a followup question about memory management.
I have created parallel data structures in QM and C# (Types in QM, Classes in C#). I assign the returned values from the C# COM object into their QM Types so that the BSTR are converted to str values. This all works fine but I don't understand the memory lifecycle. Do I need to free the pacsWebServices object allocated with _create
Member function EMIPacsWebService.GetPacsUser
or the pacsLogin C# object returned from the DLL?
Member function EMIPacsWebService.GetPacsUser
Here's the entire function for context:
Member function EMIPacsWebService.GetPacsUser
Thanks!
I have created parallel data structures in QM and C# (Types in QM, Classes in C#). I assign the returned values from the C# COM object into their QM Types so that the BSTR are converted to str values. This all works fine but I don't understand the memory lifecycle. Do I need to free the pacsWebServices object allocated with _create
Member function EMIPacsWebService.GetPacsUser
or the pacsLogin C# object returned from the DLL?
Member function EMIPacsWebService.GetPacsUser
PACSWebServiceWrapper.iPacsLogin pacsLogin = pacsWebServices.getPacsLogin(hostname);; Call to COM object
Here's the entire function for context:
Member function EMIPacsWebService.GetPacsUser
function str'hostname TUserHistory'&sUserHistory ;; Returns the PACS user for this station
#compile "RadFusionTypes"
typelib PACSWebServiceWrapper {xxx-xx-xxxxx} 1.0
PACSWebServiceWrapper.PACSWebInterface pacsWebServices
pacsWebServices._create
str baseURL = this.baseURL
;out F"endpoint {baseURL}"
pacsWebServices.setEndPointAddress( baseURL)
PACSWebServiceWrapper.iPacsLogin pacsLogin = pacsWebServices.getPacsLogin(hostname);; Call to COM object
if (pacsLogin)
,if (pacsLogin.NetworkStatus)
,,sUserHistory.NetworkStatus.StatusCode = pacsLogin.NetworkStatus.statusCode
,,sUserHistory.NetworkStatus.StatusReason = pacsLogin.NetworkStatus.statusReason
,,if (sUserHistory.NetworkStatus.statusCode = 200)
,,,sUserHistory.AeRef = pacsLogin.AeRef
,,,sUserHistory.FailedLoginDateTime = pacsLogin.FailedLoginDateTime
,,,sUserHistory.Host = pacsLogin.Host
,,,sUserHistory.LoginDateTime = pacsLogin.LoginDateTime
,,,sUserHistory.LogoutDateTime = pacsLogin.LogoutDateTime
,,,sUserHistory.UserId = pacsLogin.UserId
,,else
,,,str reason = pacsLogin.NetworkStatus.statusReason
,,,int code = pacsLogin.NetworkStatus.statusCode
,,,out F"Failed to retrieve getPacsLogin for hostname {hostname} because status code {code} reason {reason}"
,else
,,out F"Failed to retrieve getPacsLogin for hostname {hostname} null network status returned"
,,sUserHistory.NetworkStatus.StatusCode = 500
,,sUserHistory.NetworkStatus.StatusReason = "Null network status returned"
else
,out F"Failed to retrieve getPacsLogin for hostname {hostname} null object returned"
,sUserHistory.NetworkStatus.StatusCode = 500
,sUserHistory.NetworkStatus.StatusReason = "Null object returned from DLL"
,,
Thanks!