В моей первой DLL много ошибок компиляции, которых я не понимаю - PullRequest
1 голос
/ 13 августа 2011

Я пытаюсь создать свою первую простую DLL. У меня есть класс (это одноэлементный класс) и функция оконной процедуры, которую я объявляю в DLL и хочу импортировать в свой проект позже.Моя IDE - Microsoft Visual C ++ 2010, а мой проект - библиотека Win32 DLL, и я использовал шаблон DLL по умолчанию MSVC ++ (вы знаете, как он создает все файлы по умолчанию при создании проекта).

НоЯ получаю эти ошибки компиляции, которые я не понимаю, что не так?

1> c: \ users \ soribo \ dropbox \ c ++ Программирование \ Visual C ++ Программирование \ testcreatedll \ testcreatedll \ dlltest.h (15): ошибка C2059: синтаксическая ошибка: '__declspec (dllimport)'
1> c: \ users \ soribo \ dropbox \ c ++ программирование \ Visual C ++ программирование \ testcreatedll \ testcreatedll \ dlltest.h (39): ошибкаC2065: 'TestWndProc': необъявленный идентификатор
1> c: \ users \ soribo \ dropbox \ c ++ программирование \ визуальное программирование на c ++ \ testcreatedll \ testcreatedll \ dlltest.cpp (7): предупреждение C4273: 'testStaticVar': несовместимая связь dll
1> c: \ users \ soribo \ dropbox \ c ++ Программирование \ Visual C ++ Программирование \ testcreatedll \ testcreatedll \ dlltest.h (21): см. Предыдущее определение 'public: static bool MyTest :: TestClass :: testStaticVar'
1> c: \ users \ soribo \ dropbox \ c ++ программирование \ визуальное программирование на c ++ \ testcreatedll \ testcreatedll \ dlltest.cpp (7): ошибка C2491: 'MyTest :: TestClass :: testStaticVar': определение члена статических данных dllimportне разрешено
1> c: \ users \ soribo \ dropbox \ c ++ программирование \ визуальное программирование на c ++ \ testcreatedll \ testcreatedll \ dlltest.cpp (8): предупреждение C4273: 'instance': несогласованная связь dll
1> c: \ users \ soribo \ dropbox \ программирование на c ++ \ программирование на визуальном языке c ++ \ testcreatedll \ testcreatedll \ dlltest.h (35): см. предыдущее определение 'private: static MyTest :: TestClass * MyTest :: TestClass :: instance'
1> c: \ users \ soribo \ dropbox \ c ++ Программирование \ Visual C ++ Программирование \ testcreatedll \ testcreatedll \ dlltest.cpp (8): ошибка C2491: 'MyTest :: TestClass :: instance': определение элемента статических данных dllimport запрещено

Мой простой файл заголовка:

#ifndef DLLTEST_H
#define DLLTEST_H

#include <windows.h>

// This is from a tutorial I am following
#ifdef _CLASSINDLL
#define CLASSINDLL_CLASS_DECL __declspec(dllexport)
#else
#define CLASSINDLL_CLASS_DECL __declspec(dllimport)
#endif

namespace MyTest
{
    LRESULT CALLBACK CLASSINDLL_CLASS_DECL TestWndProc( HWND hwnd, UINT msg, LPARAM lParam, WPARAM wParam );

    class CLASSINDLL_CLASS_DECL TestClass
    {
        // Singleton class
        public:
            static bool testStaticVar;

            static TestClass* getInstance()
            {
                if ( instance == NULL ) { instance = new TestClass(); }
                return instance;
            }

            void add()
            {
                myMember++;
            }

        private:
            static TestClass* instance;
            WNDPROC myProc;
            int myMember;

            TestClass() : myMember(0) { myProc = (WNDPROC)&TestWndProc; }
            ~TestClass()              {}

    };
}

#endif // DLLTEST_H

Мой простой файл cpp:

#include "stdafx.h"
#include "DLLTest.h"

namespace MyTest
{
    // Create/Initialise? Class Static variables
    bool TestClass::testStaticVar = false;
    TestClass* TestClass::instance = NULL;

    LRESULT CALLBACK TestWndProc( HWND hwnd, UINT msg, LPARAM lParam, WPARAM wParam )
    {
        switch (msg)
        {
            case WM_CREATE:
            {

            }
            break;
            default:
            break;
        }

        return DefWindowProc(hwnd, msg, wParam, lParam);
    }

}

1 Ответ

0 голосов
/ 13 августа 2011

Я думаю, вам не хватает определения препроцессора _CLASSINDLL. Добавьте его в Project -> Properties -> C / C ++ -> Preprocessor -> Preprocessor Definitions.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...