从C调用C#
是否有人曾尝试过从C模块调用C#模块。我试着在网上搜索,但没有找到好的例子。虽然很多网站都说类似于使用COM互操作,但却找不到合适的例子或文章来解释它 如果有人能帮我,那就太好了 谢谢, Sveerap您可以将您的C#模块公开为COM:从C调用C#,c#,c,C#,C,是否有人曾尝试过从C模块调用C#模块。我试着在网上搜索,但没有找到好的例子。虽然很多网站都说类似于使用COM互操作,但却找不到合适的例子或文章来解释它 如果有人能帮我,那就太好了 谢谢, Sveerap您可以将您的C#模块公开为COM: > P/> P>如果要从C或C++调用托管代码,则不仅仅是COM互操作。以下也是鲜为人知的方法(摘自): 强>我如何从本地Visual C++调用.NET程序集?< /P> 基本上有四种方法来解决这个问题 从本机VC++代码调用.NET程序集: CLR宿主
<> > P/> P>如果要从C或C++调用托管代码,则不仅仅是COM互操作。以下也是鲜为人知的方法(摘自): <>强>我如何从本地Visual C++调用.NET程序集?< /P> 基本上有四种方法来解决这个问题 从本机VC++代码调用.NET程序集:
这里有一个解决方案。该解决方案允许通过使用[DllExport]属性(与P/Invoke-DllImport相反)装饰函数,从C调用C#函数 C#代码 C代码
class Test
{
[DllExport("add", CallingConvention = CallingConvention.StdCall)]
public static int Add(int left, int right)
{
return left + right;
}
}
int main()
{
int z = add(5,10);
printf("The solution is found!!! Z is %i",z);
return 0;
}
正如@iceflow19评论的那样:
链接的作者提供了一个CLR IL预处理器,作为编译过程中的一个附加步骤。由于程序集在windows上使用相同的二进制容器格式(DLL),如果您手动将IL中的.Net函数偏移量添加到vtable(DLL的导出列表)中,windows足够智能,可以在从C调用时调用CLR来运行该代码。但是会有开销。这是一个未经宣传的功能。这就是C++/CLI中混合托管库的工作方式。要使用它,只需通过Nuget添加它。在MSBuild项目文件中添加的额外目标将提供IL预处理步骤
还可以选择使用C代码构建本机库,并从C调用它们。
就是一个例子。谢谢你的帮助,我会详细研究它们并发布我的回复。我尝试了COM互操作,可以做一个类似hello world的应用程序。一个代码和CLR宿主API的链接已断开。你能提供一个更新吗(我找不到正确的链接)谢谢,我尝试了COM互操作,可以做一个hello world类的应用程序。我读了那个链接,但他没有使用它的实例。您需要在c项目中执行什么操作才能加载c#(dll?)代码?你是否需要
LoadLibrary
freebrary
等。有用的是一个示例.csproj文件加上MSBUILD指令,这将允许学生构建示例应用程序。我认为这不适用于最新的.NET,因为它仍然引用3.5,或者至少我无法使它工作=(.我认为win10中的一个解决方法是下载3.5框架。我现在就试试