从非托管c ++调用托管c#函数

时间:2010-04-27 09:17:58

标签: c# c++ c#-3.0 clr c#-2.0

如何从非托管c ++中调用托管c#函数

4 个答案:

答案 0 :(得分:9)

或者使用允许C#创建非托管导出的project of mine。可以像使用母语一样使用它们。

答案 1 :(得分:5)

我首先使用了COM互操作,但是现在我切换到IJW(它只是工作),因为它更简单。我有一个包装器C ++ / CLR DLL(用/ clr编译)。

一个简单的例子(使用静态来简化调用):

namespace MyClasses       
{
    public class MyClass
    {
        public static void DoSomething()
        {
            MessageBox.Show("Hello World");
        }
    }
}

在DLL中,我可以引用命名空间,如下所示:

using namespace MyClasses;

并称之为:

__declspec(dllexport) void CallManagedCode()
{
    MyClass::DoSomething();
}

现在您有一个非托管DLL导出“CallManagedCode”,它会调用托管代码。

当然,您还必须在托管/非托管边界之间转换数据。从VS2008开始,Microsoft包含一个marshal-helper,用于在非托管类型和托管类型之间进行转换。见http://msdn.microsoft.com/en-us/library/bb384865.aspx

答案 2 :(得分:1)

我使用了C ++ / CLI包装器类described here,它实现起来相对容易。

答案 3 :(得分:0)

RE:如何从非托管C ++应用程序调用托管C#代码?

http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.interop/2005-05/msg00030.html

从非托管C ++代码调用托管.NET C#COM对象...

http://www.codeproject.com/KB/cs/ManagedCOM.aspx

在非托管C ++项目中包装托管C#DLL:dll。

http://www.experts-exchange.com/Programming/Languages/.NET/Q_22006727.html