2016-10-27 92 views
-1

我目前正在编写一个C#应用程序,它使用C++/CLI来利用C编写的库,它不是由我自己创建的。这个库被编译成一个DLL,然后在C++项目中引用,在C++包装器中(我知道的很长时间)。使用DLL编译使用不同的编译器

这是问题所在;如果我使用MinGW将C库编译为DLL(GCC makefile随库提供),那么代码将按照原样工作,并生成正确的输出(通过命令行进行测试)。但是,如果我将所有库头文件和源文件包含到Visual Studio中的C项目中,并使用MSVC编译器进行编译,那么我会在库代码内部深入一个Read Access Violation

现在我可以(也可能应该)调试库来找出问题的具体内容,但是它的编写水平相当低,我没有多少经验;所以我的问题是,如果我使用MinGW将库编译为DLL,然后在使用MSVC编译的项目中引用该DLL,是否可以解决问题?

+0

是不是[平台调用](https://msdn.microsoft.com/en-us/library/aa288468(v = vs.71).aspx)在这种情况下更好? –

+0

试试看看。 –

+0

@VisualVincent我确实尝试过使用PInvoke,但是我无法让我的生活得到它的工作。所以我为C代码编写了一个快速C++包装器,并且C++/CLI几乎立即工作。 –

回答

1

听起来就像你在路上。这是您成为专家开发人员的机会 - 没有捷径。通过Visual Studio中的代码,当你遇到你不明白的代码时,调查。如果您花费超过2小时试图了解具体的事情,请稍事休息,调查您的调查(即尝试遵循不同的领导,尝试不同的搜索词)。尽可能继续下去,不要让自己陷入困境。 C语言特别透明 - 没有魔法。你能行的。你会很高兴你做到了。特别是理解C是值得的。任何东西。任何你可以用C语言完成(解释)的代码。 C是计算机语言的罗塞塔石。开始吧。让我们知道怎么回事。