To invoke the "Data Connection Properties" dialog, requires something like the following: IDBPromptInitialize * pDBPrompt; IUnknown * pDataSource = NULL; CoCreateInstance (CLSID_DataLinks, NULL, CLSCTX_INPROC_SERVER, IID_IDBPromptInitialize, (LPVOID *) & pDBPrompt); pDBPrompt-> PromptDataSource (NULL, HParent, DBPROMPTOPTIONS_PROPERTYSHEET, 0, NULL, NULL, IID_ID_IUNKNOWN, (IUNKNOWN **) & PDataSource); however, if IUNKNOWN * PDATASOURCE = NULL; the pointer is initialized, the program will crash. MSDN interpreted as: If * ppDataSource is null on entry, then Prompt generates a new DSO (Data Source Object, data source object) based on the information specified by the user, and returns a pointer to that DSO in * ppDataSource.If * ppDataSource is non-null on entry, Prompt uses the properties returned by iProperties :: GetProperties () as initial values. If the user selects a different provider, Prompt will release the original * ppDataSource and create a new data source. On exit, * PPDataSource Will Be set to a pointer to the interface specified by riid. That is, this initialization is necessary, otherwise the PROMPT will operate on this invalid pointer, naturally make the program crash.