2010-02-08 54 views
2

要从C#调用C API,我会使用P/Invoke。但是如果我做了相反的事情,从C调用.NET API,我将如何去做呢?调用C#(.NET)API C

回答

2

如果你真的想要通过C API来完成,并最终运行COM和C++,你可以执行以下操作。但首先要弄清楚它是否真的有必要!我怀疑在大多数情况下它不会。

第1步。创建您想调用的C#.Net程序集。

第2步。创建一个导出extern“C”函数的混合模式CLI/C++程序集。让这个程序集调用C $程序集。

步骤3.创建一个从在步骤2中

需要考虑的事项作出的DLL调用导出的空调风格功能的C应用程序。 答:是否有一个实际的NEED需要C(与C++/COM)应用程序直接调用.Net程序集?
换句话说,如果你真的必须有一个混合的(.Net和non.Net)应用程序/系统,为什么不使用C++和COM来导出.Net方法呢?

B.你写的API会不会是类的包装?如果是这样,你将如何管理他们的生活? (例如,您是否创建/使用句柄?您将如何管理它们与实际gc对象的关系等)

C.字符串。这些在C和.Net之间处理非常不同。确保你熟悉他们的差异以及如何正确地发送字符串跨越这些边界......提示:CString是你的朋友。

0

您可以将c#代码转换为COM或使用C++ \ CLI。

0

这是一个解决方案。它实现[DLLEXPORT]属性 https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports

所以可以做这样的事情来调用非托管代码托管代码:

C#代码

class Test 
{ 
    [DllExport("add", CallingConvention = CallingConvention.StdCall)] 
    public static int Add(int left, int right) 
    { 
     return left + right; 
    } 
} 

C代码

int main() 
{ 
     int z = add(5,10); 
     printf("The solution is found!!! Z is %i",z); 
     return 0; 
}