Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / .NET Framework / CLR / August 2007

Tip: Looking for answers? Try searching our database.

Using managed code in unmanaged app

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Schemer - 08 Aug 2007 22:51 GMT
Hello,

I am interested in calling managed code from an unmanaged app.  I have been
able to do it using a C++ wrapper to call in to a C# dll using
ExecuteInDefaultAppDomain().  That is a pretty restrictive method, though.

Is there a way to use an arbitrary managed code library from unmanaged code?

TIA for any info.
Sheng Jiang[MVP] - 09 Aug 2007 00:39 GMT
use CLR host APIs
see http://msdn.microsoft.com/msdnmag/issues/06/08/CLRInsideOut/default.aspx

Signature

Sheng Jiang
Microsoft MVP in VC++

> Hello,
>
[quoted text clipped - 5 lines]
>
> TIA for any info.
Schemer - 09 Aug 2007 13:45 GMT
> use CLR host APIs
> see
> http://msdn.microsoft.com/msdnmag/issues/06/08/CLRInsideOut/default.aspx

Thanks for the reply.  It is from that article that I learned about
ExecuteInDefaultAppDomain().
However, methods called via ExecuteInDefaultAppDomain() must have a specific
signature:
 static int pwzMethodName (String pwzArgument)

Is there another technique for calling managed code from unmanaged, without
the restrictions of ExecuteInDefaultAppDomain?
Jeffrey Tan[MSFT] - 11 Aug 2007 04:34 GMT
Hi Schemer,

The v2.0 hosting APIs are really all about using the AppDomainManager which
will get loaded into your process.  You can have the AppDomainManager
P/Invoke back into your host and pass a delegate out that you can then call
(just make sure to pin it if you're going to keep it alive for longer then
the duration of the call).

Alternately you could look at
System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate and
GetDelegateForFunctionPointer to marshal by hand delegates back and forth
between the two sides.  

A more general way is through a COM interface implemented by a managed
type. You create an instance of the type by calling
AppDomain.::CreateInstanceAndUnwrap(), then QueryInterface for the COM
interface, and do normal COM method calls on it.

Thanks.

Best regards,
Jeffrey Tan
Microsoft Online Community Support
==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
Jeffrey Tan[MSFT] - 09 Aug 2007 07:27 GMT
Hi Schemer,

There are 2 ways to use managed class assembly from native code: COM
interop and CLR hosting. "Sheng Jiang[MVP]" has provided the link regarding
CLR hosting.

Using COM interop, you may use regasm.exe to read the metadata of the
assembly add entries into the registry.  When a COM client calls a .NET
object, the .NET Framework will create a COM callable wrapper (CCW). COM
clients use the CCW as a proxy for the managed object. Please refer to the
articles for details:
"Exposing .NET Components to COM"
http://www.codeproject.com/dotnet/nettocom.asp
".NET Interoperability - Calling a .NET Component from a COM Component"
http://www.devcity.net/PrintArticle.aspx?ArticleID=28
".NET Interop: Get Ready for Microsoft .NET by Using Wrappers to Interact
with COM-based Applications"
http://msdn.microsoft.com/msdnmag/issues/01/08/interop/

Hope this helps.

Best regards,
Jeffrey Tan
Microsoft Online Community Support
==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.

Rate this thread:







Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.