Otherwise, szFilename will automatically be wide (sizeof(char) == 2) and nothing else is needed.
How do you figure that szFilename will be a wide char string? Considering it's declared as a char*, that is impossible.
If UNICODE is defined, you get:
Code:
char *wzFilename;  /* wzFilename is a regular char array */
wzFilename = szFilename; /* this does nothing except assign the char array to another pointer */
/* Here you get an error trying to pass a char* when the function wants an unsigned short* */
if (OleLoadPicturePath(wzFilename, NULL, 0, 0, &IID_IPicture, (void **)&lpPicture) != S_OK)
      return NULL;