У меня есть DLL с кучей функций. Пока все хорошо, для этого и нужна DLL.
Но некоторые функции в моей DLL должны вызывать функции (или обращаться к данным) из приложения, которое загрузило DLL.
App.exe:
std::vector<SomeClass> objectsList;
bool foo(void)
{
...
}
LoadLibrary( "something.dll" );
что-то.dll:
__declspec(dllexport) void someFunction(void)
{
if ( foo() )
{
objectsList[2].someAttr = 1;
}
}
Насколько я знаю, мой код DLL неверен, потому что DLL не может знать foo
или objectsList
при связывании. Итак, я вижу только так:
что-то.dll:
typedef bool fooType(void);
fooType* pFooFunc;
__declspec(dllexport) void setFoo(fooType* fooPtr)
{
pFooFunc = fooPtr;
}
__declspec(dllexport) void someFunction(void)
{
if ( (*pFooFunc)() )
{
... _same thing for objectsList_
}
}
App.exe:
LoadLibrary( "something.dll" );
setFoo = GetProcAddress(...);
setFoo(&foo);
Я прав или есть более изящный способ делать такие вещи?
Вот некоторые решения: DLL должна получить доступ к символам своего приложения
Но я все еще заинтересован в любом обсуждении этого вида дизайна.
Спасибо