Здравствуйте, flashpoint, Вы писали:
F>const Thread::`vftable'
F>или
F>??_7Thread@@6B@
F>Подскажите плз.. как используя функцию GetProcAddress(hExe,"???_7Thread@@6B@")
F>преобразовать это в класс Thread чтобы далее вызывать его методы ???
В корне неправельный подход к экспотру/импорту классов. Нужно экпортировать extern "C" функцию, которая будет предоставлять тебе доступ к объекту класса. Получив объект, ты без проблем сможешь вызывать его методы.
#if defined(building_dll) // defined in your build environment
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
extern "C" DLL_EXPORT Thread * GetThread();
class DLL_EXPORT Thread
{
...
};
// your client code
typedef Thread * (*GetThreadFuncPtr)();
GetThreadFuncPtr GetThreadFunc = static_cast<GetThreadFuncPtr>(GetProcAddress(hDll, "GetThread"));
Thread * obj = GetThreadFunc();
Здравствуйте, alexeiz, Вы писали:
A>Здравствуйте, flashpoint, Вы писали:
F>>const Thread::`vftable'
F>>или
F>>??_7Thread@@6B@
F>>Подскажите плз.. как используя функцию GetProcAddress(hExe,"???_7Thread@@6B@")
F>>преобразовать это в класс Thread чтобы далее вызывать его методы ???
A>В корне неправельный подход к экспотру/импорту классов. Нужно экпортировать extern "C" функцию, которая будет предоставлять тебе доступ к объекту класса. Получив объект, ты без проблем сможешь вызывать его методы.
A>A>#if defined(building_dll) // defined in your build environment
A>#define DLL_EXPORT __declspec(dllexport)
A>#else
A>#define DLL_EXPORT __declspec(dllimport)
A>#endif
A>extern "C" DLL_EXPORT Thread * GetThread();
A>class DLL_EXPORT Thread
A>{
A>...
A>};
A>// your client code
A>typedef Thread * (*GetThreadFuncPtr)();
A>GetThreadFuncPtr GetThreadFunc = static_cast<GetThreadFuncPtr>(GetProcAddress(hDll, "GetThread"));
A>Thread * obj = GetThreadFunc();
A>
Меня просто неправильно поняли
Задача такова:
Мой COM модуль загрузила внешняя программа. Мне надо из своего модуля получить указатель на AFX_MODULE_STATE*
Я знаю что у этой программы есть загруженный константный класс Thread у которого есть нужные мне методы. Их описание у меня тоже есть.
Я знаю что этот модуль содержит экпортируемую-задекорированную функцию const Thread::`vftable'
Теперь мне надо получив указатель на таблицу vftable превратить это в класс. Это мне и нужно !
Здравствуйте, flashpoint, Вы писали:
F>Задача такова:
F>Мой COM модуль загрузила внешняя программа. Мне надо из своего модуля получить указатель на AFX_MODULE_STATE*
F>Я знаю что у этой программы есть загруженный константный класс Thread у которого есть нужные мне методы. Их описание у меня тоже есть.
F>Я знаю что этот модуль содержит экпортируемую-задекорированную функцию const Thread::`vftable'
F>Теперь мне надо получив указатель на таблицу vftable превратить это в класс. Это мне и нужно !
vftable находится в памяти отдельно от объекта класса. На класс создаётся одна виртуальная таблица. Объекты класса имеют указатель на эту виртуальную таблицу. Поэтому по самой виртуальной таблице ты не получишь объект. И вообще то, что ты хочешь сделать, выглядит странно. Попробуй подумать можно-ли добиться этого другим способом.
Здравствуйте, alexeiz, Вы писали:
A>Здравствуйте, flashpoint, Вы писали:
F>>Задача такова:
F>>Мой COM модуль загрузила внешняя программа. Мне надо из своего модуля получить указатель на AFX_MODULE_STATE*
F>>Я знаю что у этой программы есть загруженный константный класс Thread у которого есть нужные мне методы. Их описание у меня тоже есть.
F>>Я знаю что этот модуль содержит экпортируемую-задекорированную функцию const Thread::`vftable'
F>>Теперь мне надо получив указатель на таблицу vftable превратить это в класс. Это мне и нужно !
A>vftable находится в памяти отдельно от объекта класса. На класс создаётся одна виртуальная таблица. Объекты класса имеют указатель на эту виртуальную таблицу. Поэтому по самой виртуальной таблице ты не получишь объект. И вообще то, что ты хочешь сделать, выглядит странно. Попробуй подумать можно-ли добиться этого другим способом.
Спасибо. Это я уже понял. Подумал, и сделал по другому. А именно доступ к AFX_MODULE_STATE основного приложения из паралелльного потока в COM объекте.