#include <iostream>
using namespace std;

// Dll provided header.
class Interface
{
public:
	virtual void test() = 0;
};

Interface* GetProvidedByDLL()
{
	// aligned with Interface layout.
	struct Local
	{
		virtual void foo()
		{
			cout<<data<<endl;
		}
		int data = 9487;
	};
	void* temp = (void*)new Local;
	// return (void*)new Local; // will fail compiling.
	return static_cast<Interface*>(temp);
}
int main() {
	// Assume GetProvidedByDLL is extracted by GetProcessAddress
            GetProvidedByDLL()->test();
	return 0;
}