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

use*_*246 17 c# c++ clr c#-3.0 c#-2.0

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

Rob*_*cke 9

或者使用我的项目,允许C#创建非托管导出.这些可以像使用母语一样使用.


Dan*_*ose 5

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

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

namespace MyClasses       
{
    public class MyClass
    {
        public static void DoSomething()
        {
            MessageBox.Show("Hello World");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

using namespace MyClasses;
Run Code Online (Sandbox Code Playgroud)

并称之为:

__declspec(dllexport) void CallManagedCode()
{
    MyClass::DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

现在你有一个非托管DLL导出"CallManagedCode",它调用托管代码.

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


rat*_*tty 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# DLL 包装在非托管 C++ 项目中: dll 。

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

  • 请在此处发布解决方案或至少是其摘要。该链接将来可能会断开。而且在这里阅读所有解决方案也更容易。如果它们不止一个,您可以将它们作为多个答案发布。谢谢!;) (4认同)