我一直在通过MSDN上的 dll 演练,它工作正常。然后我删除了 dll 中的所有 C++ 样式代码并将其替换为 C 等效代码,它仍然有效。
但是,当我将文件从 X.cpp 重命名为 Xc(我猜这会导致在 C 模式下编译)时,对于 dll 中的每个函数,我都会收到错误 LNK2019(未解析的外部符号)。出于我的目的,dll 必须使用 C 而不是 C++,因为这是 Java Native Access 所支持的。
这是dll的标题:
__declspec(dllexport) double Add(double a, double b);
__declspec(dllexport) double Subtract(double a, double b);
__declspec(dllexport) double Multiply(double a, double b);
__declspec(dllexport) double Divide(double a, double b);
这是使用 dll 的 (C++) 测试程序的主体:
#include <iostream>
#include "MyMathFuncs.h"
using namespace std;
int main()
{
double a = 7.4;
int b = 99;
cout << "a + b = " <<
Add(a, b) << endl;
cout << "a - b = " <<
Subtract(a, b) << endl;
cout << "a * b = " <<
Multiply(a, b) << endl;
cout << "a / b = " <<
Divide(a, b) << endl;
return 0;
}
(只是为了澄清测试程序在 C++ 中很好;它只是我试图用 C 编译的 dll)。