如何在可通过运行它的应用程序更改的dll中创建条件

时间:2018-11-16 20:44:04

标签: c# c++ dll

我的问题很简单,我有一个用c ++编写的dll,我从c#程序中调用它。我的问题是,我是否可以在c#程序中使用一个可以用C ++编写的dll中使用的变量,并在更改变量时更改程序中的条件。例如:


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 :(得分:1)

否(根据您的情况)

让我们暂时忽略语言上的差异;库的重点是可以在不同的使用者(程序)之间重用。因此,知道使用它的应用程序的某些细节(如变量)的库完全无法达到目的。

此外,它创建了循环依赖关系,没有编译器会这样做。

是(应用程序可以更改库对象状态)

程序总是 这样做,但是它们是通过从库中创建适当的对象并对其调用方法(或改变状态等)来实现的。假设myClass有一个方法setZ设置了它的 local z变量,并从正在运行的应用程序中调用了该方法(它甚至可以使用其(程序)z变量!)随后对myClass的调用将使用该更新后的值。

总的来说,这似乎是对OOP基础的重新审视,并且可能有针对性的库。