簡體   English   中英

C ++如何使dll從主線程修改變量?

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

我目前有一個可以幫助我進行一些操作的dll,我希望我的dll可以修改主線程的變量。 我是否應該以某種方式將類(變量具有類的類型名稱)發送到dll,我是否還應使dll包含定義了類的文件(.h文件)。

所以基本上,我怎樣才能讓dll修改另一個線程(在這種情況下,是主線程)的變量?

編輯:

我要更改的變量是這樣的:

組<UMesh> InstancedMesh

組是模板類,而UMesh是另一個類。

我是否應該以某種方式將類(變量具有類的類型名稱)發送到dll,我是否還應使dll包含定義了類的文件(.h文件)。

不,您不應使您的庫依賴於某些應用程序類型。 那么該庫將如何用於其他應用程序?


您的庫僅接受該庫已知類型的對象。

因此,您在應用程序中具有類型:

template <class T>
class Group;

並且您需要一些庫函數來接受這種類型的對象。

有兩種典型的解決方案:

第一個解決方案 ,將其命名為ObjectOriented解決方案,在您的庫中創建一個接口,並接受實現該接口的對象的函數:

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);

順便說一句,通過對象接口,我的意思是所有在此對象上操作的公共函數和所有全局函數(例如, operator << (ostream,Object)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM