- #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; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gRGxsIHByb3ZpZGVkIGhlYWRlci4KY2xhc3MgSW50ZXJmYWNlCnsKcHVibGljOgoJdmlydHVhbCB2b2lkIHRlc3QoKSA9IDA7Cn07CgpJbnRlcmZhY2UqIEdldFByb3ZpZGVkQnlETEwoKQp7CgkvLyBhbGlnbmVkIHdpdGggSW50ZXJmYWNlIGxheW91dC4KCXN0cnVjdCBMb2NhbAoJewoJCXZpcnR1YWwgdm9pZCBmb28oKQoJCXsKCQkJY291dDw8ZGF0YTw8ZW5kbDsKCQl9CgkJaW50IGRhdGEgPSA5NDg3OwoJfTsKCXZvaWQqIHRlbXAgPSAodm9pZCopbmV3IExvY2FsOwoJLy8gcmV0dXJuICh2b2lkKiluZXcgTG9jYWw7IC8vIHdpbGwgZmFpbCBjb21waWxpbmcuCglyZXR1cm4gc3RhdGljX2Nhc3Q8SW50ZXJmYWNlKj4odGVtcCk7Cn0KaW50IG1haW4oKSB7CgkvLyBBc3N1bWUgR2V0UHJvdmlkZWRCeURMTCBpcyBleHRyYWN0ZWQgYnkgR2V0UHJvY2Vzc0FkZHJlc3MKICAgICAgICAgICAgR2V0UHJvdmlkZWRCeURMTCgpLT50ZXN0KCk7CglyZXR1cm4gMDsKfQ==