使用MinGW编译的DLL在使用Visual Studio Compiler编译的C ++代码中不起作用

时间:2013-04-19 12:14:45

标签: c++ c dll mingw

我用MinGW编译了一个dll。为此,我使用了以下命令:

gcc -shared -o MathsDll.dll MathsDll.c -Wl,--output-def,MathsDll.def,--out-implib,libMathsDll.a

lib /machine:i386 /def:MathsDll.def

然后我尝试从C代码中使用该DLL。我的编译命令如下:

cl mainCode.c MathsDll.lib

它适用于那种情况,但当我将mainCode.c文件更改为mainCode.cpp时,我收到错误:

mainCode.obj:错误LNK2019:未解析的外部符号“__declspec(dllimport) 函数_main中引用的int _ cdecl add(int,int)“( _imp_?add @@ YAHHH @ Z) mainCode.exe:致命错误LNK1120:1个未解析的外部

为什么dll在C代码中工作但是C ++?

顺便说一下,我使用MinGW的网站作为参考。 http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs

mainCode.cpp:

#include <stdio.h>
#include "MathsDll.h"

int main()
{
printf("%d",add(3,4));
}

MathsDll.h:

#ifdef MATHDLL_EXPORTS
#define MATHDLL_API extern "C" __declspec(dllexport) 
#else
#define MATHDLL_API __declspec(dllimport) 
#endif

MATHDLL_API int add(int,int);
MATHDLL_API int multiply(int,int);

MathsDll.c / MathsDll.cpp:

#include "MathsDll.h"

int add(int a,int b)
{
    return a+b;
}

int multiply(int a,int b)
{
    return a*b;
}

1 个答案:

答案 0 :(得分:2)

  

如果您在用C编写的DLL中有要访问的函数   从C语言或C ++语言模块,你应该使用   __cplusplus预处理程序宏来确定正在编译哪种语言,然后使用C链接声明这些函数   用于C ++语言模块。

http://msdn.microsoft.com/en-us/library/ys435b3s.aspx