Создание динамической библиотеки с помощью компилятора gcc
Создаю динамическую библиотеку с помощью компилятора GCC (исходники в архиве). Скриншот командной строки во вложениях. Возникает две проблемы: не получается подключиться к библиотеке из программы на Си плюс плюс.
#include <iostream>
#include <windows.h>
#include <string>
int main()
{
HINSTANCE hModule = NULL;
hModule = ::LoadLibrary(L"mydll.dll");
if (hModule == NULL) std::cout << "hModule = NULL" << std::endl;
system("pause");
}
Так же компилятор выдает предупреждение:
gcc warning: 'void PROGRAM3Call()' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes]
Если же скомпилировать ту же библиотеку с помощью Visual Studio, то компиляция проходит успешно, проблем с подключением библиотеки не возникает. В чем тут дело?
//Код библиотеки
//файл dllmain.cpp
#include "ExportFunctions.h"
#include "pch.h"
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
//файл ExportFunctions.h
#pragma once
#ifndef __TESTDLL_H
#define __TESTDLL_H
#ifdef TESTDLL_EXPORTS
#define DLL_SPEC extern "C" __declspec(dllexport)
#else
#define DLL_SPEC extern "C" __declspec(dllimport)
#endif
extern "C++" __declspec(dllimport) void PROGRAM3Call();
#endif
//файл pch.cpp
#include "ExportFunctions.h"
using namespace std;
void PROGRAM3Call()
{
var_collection.MASS[0] = 20;
var_collection.RVALP3 = 3.125;
}
void PROGRAM4Call()
{
var_collection.MASS[2] = 40;
}
void InitDll(void* startValues)
{
var_collection = *((VarVal*)startValues);
}
SYSTEMTIME CreateDate(WORD y, WORD m, WORD d)
{
SYSTEMTIME date;
date.wYear = y;
date.wMonth = m;
date.wDay = d;
date.wHour = 0;
date.wMinute = 0;
date.wSecond = 0;
date.wMilliseconds = 0;
FILETIME ft;
HRESULT hrto = SystemTimeToFileTime(&date, &ft);
HRESULT hrback = FileTimeToSystemTime(&ft, &date);
return date;
}
//файл pch.h
#ifndef PCH_H
#define PCH_H
#endif
#include "framework.h"
#include <string>
#include <math.h>
#include <stdint.h>
struct VREAL
{
float VALUE;
int32_t VALID;
};
struct VarVal
{
bool B1;
VREAL STRU;
float MASS[128];
float RVALP3;
};
VarVal var_collection;
//файл framework.h
#pragma once
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>