Improve company productivity with a Business Account.Sign Up

x
?
Solved

Is this considered unmanaged code?

Posted on 2009-04-08
6
Medium Priority
?
307 Views
Last Modified: 2012-05-06
I'm making use of Microsoft.Interop.Security.AzRoles.  I may catch a COMException in some locations.  Would this make some of my code considered as unmanaged?  In other words, does accessing COM related assemblies mean you are doing unmanaged code?  Seems you still get garbage collection.

Would unmanaged code be only anything using the DLLImport or unsafe blocks?

0
Comment
Question by:brettr
6 Comments
 
LVL 15

Assisted Solution

by:oobayly
oobayly earned 400 total points
ID: 24099639
According to this article, yes

"Code executing under the control of the runtime is called managed code. Conversely, code that runs outside the runtime is called unmanaged code. COM components, ActiveX interfaces, and Win32 API functions are examples of unmanaged code."
0
 

Author Comment

by:brettr
ID: 24099678
Don't understand.  My calls are in managed code.  The assemblies I'm calling are managed but have COM references somewhere I'm sure.  So what does that make my code?
0
 
LVL 3

Expert Comment

by:OutOfTouch
ID: 24099858
0
The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

 

Author Comment

by:brettr
ID: 24099993
Thanks.  I was looking for someone to answer my specific questions in their own words rather than providing links.

I see the azman DLL as about unmanaged as calls into System.Windows.Forms namespace.   Under the hood, it calls GDI+ but we don't say our code is unmanaged.  How close to the unmanaged implementation do you have to be before it is unmanaged?  The way I see it, if everything you are writing can be cleaned up by the runtime, it is managed code. Not exactly sure where that puts DLLImport. You might reference something like the azman API but those implicit COM object instances are disposed of automatically by the runtime because of how you referenced them.  Disagreements?
0
 
LVL 5

Accepted Solution

by:
burningmace earned 1000 total points
ID: 24100343
I think you're misinterpreting the way .NET handles managed and unmanaged code. Say I were to declare FindWindow using DLLImport in a C# application, then call it with a pair of string variables. The string variables are managed. The FindWindow method (see code sample) itself is actually managed. When I call the FindWindow method, the [DLLImport("user32.dll"]) part tells InteropServices to translate the contents of the method parameters to unmanaged types and call the API. The core .NET framework itself is unmanaged because it is not written in VB.NET/C#/J#, but rather an unmanaged language such as C++.

A simple analogy is PHP. In PHP you cannot call GetFileSize in kernel32.dll, but you can get the PHP interpreter to call it for you using the filesize function. When you call it, PHP translates the file name string you gave it into a char* (or similar) and calls the appropriate APIs (OpenFile, GetFileSize, etc) to find the information it needs. It then translates the result into a format that can be used as a variable within the PHP script.
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

Open in new window

0
 
LVL 3

Assisted Solution

by:OutOfTouch
OutOfTouch earned 600 total points
ID: 24103194
Okay in my own words: Your code is managed code but your code is using an Interop assembly to call into unmangaged COM code. The interop assembly itself is managed code. The underlying COM api's being called are not managed code.
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Watch the video to know how one can repair corrupt Exchange OST file effortlessly and convert OST emails to MS Outlook PST file format by using Kernel for OST to PST converter tool. It can convert OST to MSG, MBOX, EML to access them. It can migrate…
Did you know PowerShell can save you time with SaaS platforms? Simply leverage RESTfulAPIs to build your own PowerShell modules. These will kill repetitive tickets and tabs, using the command Invoke-RestMethod. Tune into this webinar to learn how…

608 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question