Richard is correct. You don't even initialize the structure you're supposed to be passing in so nothing is going to happen except an error being generated, which you don't even bother to go pickup with the
CommDlgExtendedError[
^] function.
Your definition of the OPENFILENAME structure is also very wrong. You can find a much better definition on P/Invoke.net,
here[
^].