ОК, новый ответ в свете новой информации здесь. Если вы не можете сгенерировать библиотеку экспорта для своего EXE-файла с помощью компилятора, и вам действительно нужно сделать это таким образом, вот креативное, хакерское и, как правило, не рекомендуемое решение:
Шаг 1. Создайте API-оболочку C для вашего класса, вроде этого (возможно, не скомпилируется, но вы поняли):
// Yes, need some 32 bit/64 bit checks here
#define MYHANDLE unsigned int
__declspec(dllexport) MYHANDLE MyClassNewInstance() {
MyClass* ptr = new MyClass();
return (MYHANDLE)ptr;
}
__delspec(dllexport) MyClassDoSomething( MYHANDLE handle, int parm ) {
MyClass* ptr = (MyClass*)handle;
ptr->DoSomething(parm);
}
etc..
Шаг 2. Чтобы получить функции C из EXE-файла для использования в DLL, используйте функции Win32 API GetModuleHandle () и GetProcAddress ().
Шаг 3: Создайте прокси-класс в вашей DLL. Методы в прокси-классе ничего не делают, кроме как вызывают их аналогичные функции C из EXE.
Это позволит сохранить "настоящую" реализацию вашего класса от DLL. Это взлом, но это, вероятно, сработает.