как создать условия в dll, которые можно изменить с помощью приложения, в котором он работает - PullRequest
0 голосов
/ 16 ноября 2018

У меня простой вопрос, у меня есть DLL, которую я написал на C ++, и я вызываю ее из программы на C #. Мой вопрос заключается в том, могу ли я иметь переменную в программе на c #, которую можно использовать в dll, написанной на C ++, и изменять условия внутри программы при изменении переменной. например:


C #:

int z = 0;  //variable which i want to know if it can be used inside the dll.
[DllImport("C:\\Users\\example\libtest.dll")]  //path to the dll
public static extern void libtest(int x);  //

C ++:

#include "C:\\Users\\app.cpp"   //path to the actual program
#include "C:\\Users\\Header.h"  //^^

extern "C" __declspec(dllexport) void libtest(int x) {

    myClass libtestx(x);
}

C ++ (Header.h):

#pragma once

class myClass
{
public:
    myClass(int x);
private:
    //bool z;
};

C ++ (app.cpp):

void dosomething():
    //some method to do something
    while(z == 0){  //heres my question, can a var (z) inside the c# program set the conditions?
    //do something
    }
myClass::myClass(int x) {
    if (x == 1) {
        dosomething();
    }
    else if (x == 0) {
        //do nothing
    }

}

обратите внимание, что я только начал изучать эти два языка, и все, что я изучал и писал, я узнал, просто задавая вопросы и читая онлайн, так что извините, если я звучу глупо или мой код - мусор. Я буду очень благодарен за любую помощь относительно моего вопроса или любые советы, которые могли бы помочь мне улучшить. Еще раз спасибо.

1 Ответ

0 голосов
/ 16 ноября 2018

Нет (к вашему подходу)

Давайте пока проигнорируем разницу в языках; весь смысл библиотек заключается в том, чтобы их можно было многократно использовать для разных потребителей (программ). Таким образом, библиотека, зная некоторые детали приложения, использующего ее (например, переменную), полностью отрицает цель.

Более того, он создает циклическую зависимость, компилятор не собирается это делать.

Да (приложения могут изменять состояние объекта библиотеки)

Программы делают это все время , но они делают это, создавая соответствующие объекты из библиотеки и вызывая методы для них (или изменяя состояние и т. Д.). Скажем, у myClass был метод setZ, который устанавливал свою локальную z переменную и который вызывался из запущенного приложения (он мог даже использовать значение своей (программы) z переменной! ) Затем последующие вызовы myClass будут использовать это обновленное значение.

В целом это похоже на пересмотр основ ООП, и для чего могут быть полезны библиотеки.

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