Ma perché continui a proporre la domanda senza rispondere a quanto ti si dice?

Perché continui a mischiare codice managed .NET e codice nativo che usa le API?

Così avrai sempre errori

Se utilizzi un progetto managed, allora utilizza OpenFileDialog

(di cui trovi documentazione in http://msdn.microsoft.com/it-it/libr...openfiledialog(v=vs.80).aspx )

e in questo caso non devi usare quel codice che hai mostrato perché non è adatto.

Se utilizzi le API native (GetOpenFileName) il codice va bene ma non devi creare un progetto managed.