C# 从非托管C++调用C代码? 在莫诺河中,您可以将委托从C传递到C++函数,该函数将委托作为函数指针。这可以在Windows上的C++中完成,例如,您可以编译一个本地C++非托管库,将它链接到C项目,并获得一个C++函数,通过一个函数指针来调用C函数,C作为代表传递给它。

C# 从非托管C++调用C代码? 在莫诺河中,您可以将委托从C传递到C++函数,该函数将委托作为函数指针。这可以在Windows上的C++中完成,例如,您可以编译一个本地C++非托管库,将它链接到C项目,并获得一个C++函数,通过一个函数指针来调用C函数,C作为代表传递给它。,c#,c++,pinvoke,C#,C++,Pinvoke,您有一个选项是使用C++/CLI调用C代码。如果C++代码必须保持非托管原生,那么您应该将C代码包在COM组件中并从C++代码中使用它。< P>您可以选择使用C++/CLI调用C代码。如果C++代码必须保持非托管原生,那么您应该将C代码包在COM组件中并从C++代码中使用它。< P>在.NET中定义委托,然后将其传递给非托管代码。CLR将把委托公开为函数指针,您可以从非托管代码调用它 互操作层不知道如何处理C++中的引用。因此,您需要将对象公开为指针,而不是引用。另外,.NET不知道什么是C++

您有一个选项是使用C++/CLI调用C代码。如果C++代码必须保持非托管原生,那么您应该将C代码包在COM组件中并从C++代码中使用它。

< P>您可以选择使用C++/CLI调用C代码。如果C++代码必须保持非托管原生,那么您应该将C代码包在COM组件中并从C++代码中使用它。

< P>在.NET中定义委托,然后将其传递给非托管代码。CLR将把委托公开为函数指针,您可以从非托管代码调用它

互操作层不知道如何处理C++中的引用。因此,您需要将对象公开为指针,而不是引用。另外,.NET不知道什么是C++ 对象是它与System.object不同。这需要通过 作为一个IntPtr,我认为在.NET中你不能用它做很多事情

C++回调:

typedef void (*CBFUNC1)(unsigned int, const char*, object&);
typedef object* (*CBFUNC2)(object*, struct _mystruct* );
C代表的签名将是:

delegate void CbFunc1(uint param1, [MarshalAs(UnmanagedType.LPStr)] string
param2, IntPtr param3);
delegate IntPtr CbFunc2(IntPtr param1, ref _mystruct param2);

在.NET中定义委托,然后将其传递给非托管代码。CLR将把委托公开为函数指针,您可以从非托管代码调用它

互操作层不知道如何处理C++中的引用。因此,您需要将对象公开为指针,而不是引用。另外,.NET不知道什么是C++ 对象是它与System.object不同。这需要通过 作为一个IntPtr,我认为在.NET中你不能用它做很多事情

C++回调:

typedef void (*CBFUNC1)(unsigned int, const char*, object&);
typedef object* (*CBFUNC2)(object*, struct _mystruct* );
C代表的签名将是:

delegate void CbFunc1(uint param1, [MarshalAs(UnmanagedType.LPStr)] string
param2, IntPtr param3);
delegate IntPtr CbFunc2(IntPtr param1, ref _mystruct param2);

这显然是可以做到的——所有CLR主机都是本机应用程序。您的选择:

在托管应用程序中调用本机DLL PInvoke 按照Dan的建议调用托管COM对象 主机CLR自己-
这显然是可以做到的——所有CLR主机都是本机应用程序。您的选择:

在托管应用程序中调用本机DLL PInvoke 按照Dan的建议调用托管COM对象 主机CLR自己- <>你正在寻找.< /p> 的答案是正确的,但是路径上还有很多问题,取决于你是否立即调用C调用C++,或者调用C重复调用C C++,并且在调用一次或多次调用C.< /P>后返回。 我是从Unity/C和C/C++/Objective-C互操作的角度编写的,但是无论您在哪里进行C/C互操作,您可能会发现一些注释和代码片段都很有用

特别是,如果C/非托管代码可能在其他时间回调,请确保您正确地保留/保留了从C/托管代码传递到C/非托管代码的任何委托。

的答案是正确的,但是在路上有很多更多的问题,这取决于你是否立即调用C调用C++,它调用C,或者如果你想重复调用C调用C++,并且在调用一次或多次调用C.< /P>后返回。 我是从Unity/C和C/C++/Objective-C互操作的角度编写的,但是无论您在哪里进行C/C互操作,您可能会发现一些注释和代码片段都很有用


特别是确保如果C/非托管代码可能在不同的时间调用,您可以正确地保留/持有从C++传递的任何委托/管理到C/un托管代码。看看这个。也许它正是你所期待的,因为我们可以在C和C++之间进行交互。看看这个。也许它是你所寻找的,即使是非托管C++,也只是你必须为MsHalLungIn提供你自己的元数据,甚至是用非托管C++,你只能为编组提供你自己的元数据。