C# 使用使用不同编译器编译的DLL

C# 使用使用不同编译器编译的DLL,c#,c,dll,C#,C,Dll,我目前正在编写一个C#应用程序,它使用C++/CLI来利用不是我自己创建的C语言编写的库。这个库被编译成一个DLL,然后在C++程序中引用,在C++包装器中(我知道的长篇大论)。 问题就在这里;如果我使用MinGW将C库编译成一个DLL(库中提供了一个GCC生成文件),那么代码将正常工作并生成正确的输出(这是通过命令行测试的)。但是,如果我将所有库头和源文件包含到Visual Studio中的C项目中,并使用MSVC编译器对其进行编译,则在库代码的深处会出现读取访问冲突 现在我可以(也可能应该)

我目前正在编写一个C#应用程序,它使用C++/CLI来利用不是我自己创建的C语言编写的库。这个库被编译成一个DLL,然后在C++程序中引用,在C++包装器中(我知道的长篇大论)。 问题就在这里;如果我使用MinGW将C库编译成一个DLL(库中提供了一个GCC生成文件),那么代码将正常工作并生成正确的输出(这是通过命令行测试的)。但是,如果我将所有库头和源文件包含到Visual Studio中的C项目中,并使用MSVC编译器对其进行编译,则在库代码的深处会出现
读取访问冲突


现在我可以(也可能应该)调试这个库来找出到底是什么问题,但是它是用相当低级的C语言编写的,我没有太多的经验;因此,我的问题是,如果我使用MinGW将库编译成一个DLL,然后在使用MSVC编译的项目中引用该DLL,这会解决问题吗

听起来你已经上路了。这是您成为专家开发人员的机会-没有捷径。在VisualStudio中逐步浏览代码,当您遇到不理解的代码时,请进行调查。如果你花了2个多小时试图理解某个特定的东西,休息一下,集中精力进行调查(即尝试跟随不同的线索,尝试不同的搜索词)。尽可能多地坚持下去,不要让自己陷入困境。C语言是特别透明的——没有魔力。你能做到。你会很高兴你这么做的。尤其值得努力去理解C。任何东西在代码中可以做的任何事情都可以用C语言来完成(解释)。C是计算机语言中的罗塞塔之石。开始吧。让我们知道它是如何运行的。

在这种情况下不是更好吗?试试看。@VisualIncent我确实尝试过使用PInvoke,但我一生都无法让它工作。所以我编写了一个C代码的快速包装器,C++几乎可以立即工作。只要C++的DLL方法被封装在<代码>外“C”< /C>块中,得到参数和调用权,P/调用就可以工作。