Создание динамической библиотеки с помощью компилятора 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>

Ответы (0 шт):