Вы вызываете GetProcAddress (hMod, "CCalc")
, однако "CCalc"
- это не имя функции: это имя класса.
Вы пытаетесь загрузить адрес конструктора по умолчанию CCalc::CCalc
: для этого используйте инструмент (например, dumpbin
), чтобы обнаружить «украшенное» имя конструктора.
Однако вместо того, чтобы пытаться динамически загружать и вызывать конструктор, более обычным способом реализации этой функциональности будет создание статического метода фабрики в DLL, например, как это:
class CALC_API CCalc
{
public:
static CCalc* create() { return new CCalc(); }
private:
//doesn't need to be public because users instantiate this class using
//the static create method
CCalc();
public:
virtual int Add (int i, int j);
virtual int Sub (int i, int j);
virtual TCHAR* GetLastUsedFunc ();
virtual ~CCalc() {}
};
Затем используйте GetProcAddress, чтобы получить адрес статической функции CCalc :: create, которую, поскольку она статическая, можно вызывать без использования ассемблера, чтобы связываться с ECX
.