twitter
    musings about technology and software development..

Calling a web service from unmanaged code

Just wasted a few hours of my life with a seemingly trivial segment of code.  Spot the error:

   HRESULT hrInit = CoInitialize(NULL);

   CUserProfileWebService webService;
   webService.Execute();

   if (SUCCEEDED(hrInit))
      CoUninitialize();
I was getting an Access Violation when the application exited, which means I was trying to access memory that no longer belonged to me.  Turns out, the problem was due to scope.  The "webService" object doesn't fall out of scope until after CoUninitialize has been called, so it doesn't know to clean itself up until it's too late.  The fix is to enclose the webService variable in it's own scope, such as the following:
  HRESULT hrInit = CoInitialize(NULL);
  {
    CUserProfileWebService webService;
    webService.Execute();
  }

  if (SUCCEEDED(hrInit))
    CoUninitialize();
In this instance, “webService” will clean itself up immediately after the } curly brace. Of course, it took forever to narrow it down to these five lines of code, at which point I realized my mistake. *sigh*

1 comments:

Văn Sát said...

Bạn là chủ xe và đang cần tìm hàng vận chuyển? Bạn là người cần tìm xe vận chuyển hàng? Vậy bạn hãy ghé vào sàn vận tải nội địa đây là nơi sẽ giúp bạn tìm thấy thứ bạn đang cần tìm. Hiện nay, chúng tôi tự hào là một trong những đơn vị cung cấp giải pháp vận chuyển hàng đầu hiện nay. Với các dịch vụ vận chuyển hàng hóa nội địa, vận chuyển Bắc Trung Nam, vận chuyển hàng đông lạnh bắc nam,... Đến với chúng tôi bạn sẽ không cần lo lắng tìm hàng hay tìm xe để vận chuyển hàng. Hiện nay thì các tuyến vận chuyển chúng tôi đang có thể kể đến như: vận chuyển hàng đi bạc liêu, vận chuyển hàng đi vũng tàu, vận chuyển hàng đi bắc ninh, vận chuyển hàng đi bến tre,... Để biết thêm thông tin hãy liên hệ với chúng tôi nhé.

Post a Comment