Как определить функцию вне библиотеки? - PullRequest
0 голосов
/ 18 мая 2019

у нас есть некоторый динамический плагин-dll, который генерируется с помощью отдельной защиты и используется при запуске программного обеспечения. Код плагина-dll - это использование некоторых заголовочных файлов из основного проекта. во время компиляции кода плагина, если основной файл заголовка проекта содержит некоторую функцию и определение вне класса, в то время я получаю ошибку, как неразрешенный внешний символ.

Эта ошибка ожидается из-за того, что код плагина не находит определение функции (основного проекта).

Примечание: плагин должен быть скомпилирован до компиляции основного проекта.

В двух случаях плагин кода компилируется. 1) Если основной заголовочный файл проекта имеет чисто виртуальную функцию, то это работа отлично (подключаемый код отлично компилируется). 2) Если я напишу определение функции внутри класса.

Я пробовал встроенную функцию, но она не работала.

---------------------
*** Main Project ***
---------------------
 ->This project generate .exe file 

mainProject.h
-------------
class MainProjectHeder{

   virtual void foo() = 0;    // this function is work 
   void foo1();              // this function giving me error like unresolved external symbol  
   void foo2{                // this work
     print("hello");
   };
};

void MainProjectHeder::foo1(){
     print("function not working");
}  


ExperimentFactoryInterface.h 
----------------------------
#include <MainProjectHeder.h>

class ExperimentFactoryInterface {
public:
    virtual ~ExperimentFactoryInterface() {}
    virtual MainProjectHeder* CreateExperiment(const QVariant& = QVariant()) = 0;
};



----------------------
  *** Pulgin code  ***  
----------------------
->This Project is generate DLL file

Experiment.h 
-------------

#include <mainProject.h>
class Experiment : public MainProjectHeder{

      virtual void foo();  
};

void Experiment:foo(){
    print("work fine");
}  


Factory.h
----------
#include "cyclicvoltammetry.h"
#include <ExperimentFactoryInterface.h>

class Factory : public ExperimentFactoryInterface {
public:
    MainProjectHeder* CreateExperiment(const QVariant& = QVariant());
};


MainProjectHeder* Factory::CreateExperiment(const QVariant&) {
    return new Experiment;
}

при компиляции кода плагина; как я могу сообщить компилятору, как определение функции void foo1(); - это запись в проект или в другой проект?

1 Ответ

0 голосов
/ 18 мая 2019

Функция-член класса - это функция, которая имеет свое определение или свой прототип в определении класса, как и любая другая переменная.Он работает с любым объектом класса, членом которого он является, и имеет доступ ко всем членам класса для этого объекта.

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