C# 在C中使用非托管代码(C)#

C# 在C中使用非托管代码(C)#,c#,c,unmanaged,managed,C#,C,Unmanaged,Managed,我正在做一个项目,它结合了一个用C编写的非常大的开源项目(OSP),并试图用C#构建一个前端。我目前正在使用Visual Studio 2012 Express编译OSP,并从该项目生成所有的.exe、.dll等 我应该如何执行集成?(请记住,我可以完全访问.h/.c文件)我尝试使用IJW(它刚刚工作)方法,但它似乎不允许我导入新编译的.dll的引用。除此之外,我不知道如何在C#中执行各种函数(除了向.exe发送命令行命令,我不希望这样做……) 我是否需要为IJW编译带有特殊选项/参数的OSP,

我正在做一个项目,它结合了一个用C编写的非常大的开源项目(OSP),并试图用C#构建一个前端。我目前正在使用Visual Studio 2012 Express编译OSP,并从该项目生成所有的.exe、.dll等

我应该如何执行集成?(请记住,我可以完全访问.h/.c文件)我尝试使用IJW(它刚刚工作)方法,但它似乎不允许我导入新编译的.dll的引用。除此之外,我不知道如何在C#中执行各种函数(除了向.exe发送命令行命令,我不希望这样做……)


我是否需要为IJW编译带有特殊选项/参数的OSP,还是需要重新编写代码

对于用C编写的DLL,您需要用C#编写等价的声明,而不是添加对该DLL的引用

这被称为PInvoke

class ABC
{
    [DllImport("abc.dll")]
    public static extern int FuncX(int x, int y);
}

请注意,
[DllImport]
必须在类内,但不能在任何方法内。是否还有其他更干净的方法?(或者至少是更干净的声明),编写一个类来保存导入的方法感觉非常混乱。每个方法只需要2行代码,我认为这并不凌乱。您不能直接从托管代码访问非托管代码,您只能使用p/invoke,正如@linquize所建议的那样。如果不想使用[DllImport],您可以选择为C类和方法编写一个C++/CLI(混合托管/非托管)包装器。即