C 如何使DLL从主线程修改变量

C++ How to make a dll modify a variable from main thread?

本文关键字:线程 修改 变量 何使 DLL      更新时间:2023-10-16

我当前有一个DLL,可以帮助我进行某些操作,我希望我的DLL可以修改主线程的变量。我是否以某种方式将类(变量具有类的类型)发送到dll,如果我还将DLL包含在定义类的地方(.h file)的文件。

基本上,如何从另一个线程(在这种情况下为主线程)进行DLL修改变量?

编辑:

我要更改的变量就是这样:

Group<UMESH> IntancedMesh

组是模板类,Umesh是另一个类。

我以某种方式将类(变量具有类的类型)发送到 dll,我还应该使DLL包括班级的文件 定义(.h file)。

不,您不得使您的库取决于某种应用程序类型。然后如何适用于其他应用程序?


您的库仅接受此库已知的类型的对象。

所以,您的应用程序中有类型:

template <class T>
class Group;

您想要一些库功能接受此类型的对象。

有两个典型的解决方案:

第一个解决方案,让命名为反对解决方案,在库中创建一个接口,并函数接受实现此接口的对象:

class SomInterface {
public:
  virtual void foo1() = 0;
  virtual void foo2() = 0;
};
void doSomething(SomeInterface& object);

然后要在您的应用程序中使用doSomething,您的类应从此接口派生:

template <class T>
class Group : public SomeInteface {
public:
  virtual void foo1() {...}
  virtual void foo2() {...}
};
Group<UMesh> object;
doSomething(object);

或(我更喜欢这个)从您的班级制作适配器到此接口:

template <class T>
class GroupSomeInterface : public SomeInteface {
public:
  GroupSomeInterface(Group<UMesh& object) : object(object) {}
  virtual void foo1() {...}
  virtual void foo2() {...}
private:
  Group<UMesh& object;
};
Group<UMesh> object;
GroupSomeInterface<UMesh> adapter(object);
doSomething(adapter);

第二个解决方案,让其命名为通用解决方案,因为您有模板类,因此对于这种特定情况应该更好。在库中制作函数模板,接受任何类型的某种接口:

template <class T>
void doSomething(T& object);
Group<UMesh> object;
doSomething(object);

如果您的Group<T>没有此方法所需的接口,则像第一个解决方案一样制作一个适配器 - 但是这次没有显式接口类,没有虚拟主义:

template <class T>
class GroupSomeInterface  {
public:
  GroupSomeInterface(Group<UMesh& object) : object(object) {}
  void foo1() {...}
  void foo2() {...}
private:
  Group<UMesh& object;
};
Group<UMesh> object;
GroupSomeInterface<UMesh> adapter(object);
doSomething(adapter);

btw,通过对象接口,是指所有公共功能以及在此对象上运行的所有全局功能(例如operator << (ostream,Object)