Я прошёл прохождение dll по MSDN , и он работает нормально.Затем я удалил весь код стиля C ++ в dll и заменил его на эквивалент C, и он все еще работает.
НО, когда я переименовываю файл из X.cpp в Xc (что, по-моему, вызывает компиляцию в C-режиме), я получаю ошибку LNK2019 (неразрешенный внешний символ) для каждой функции в dll.Для моих целей важно, чтобы 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);
Вот тело (C ++) тестирующая программа, использующая dll:
#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 ++; это только dll, которую я пытаюсь скомпилировать в C).