GetOpenFileName函数打开选择文件的对话框,“我的电脑”里面什么都显示不出来的解决办法

如下图所示,其他文件夹都正常,就是“我的电脑”里面什么都没有。

#include <tchar.h>
#include <Windows.h>
#include <CommCtrl.h>

#pragma comment(lib, "comctl32.lib")
#pragma comment(linker, "\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' language='*' publicKeyToken='6595b64144ccf1df'\"")

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
	char szFileName[MAX_PATH] = {0};
	OPENFILENAMEA ofn = {0};

	InitCommonControls();
	CoInitializeEx(NULL, COINIT_MULTITHREADED);

	ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR;
	ofn.hInstance = hInstance;
	ofn.hwndOwner = NULL;
	ofn.lStructSize = sizeof(OPENFILENAMEA);
	ofn.lpstrDefExt = "hex";
	ofn.lpstrFile = szFileName;
	ofn.lpstrFilter = "HEX文件 (*.hex)\0*.HEX\0所有文件 (*.*)\0*.*\0";
	ofn.nMaxFile = sizeof(szFileName);
	GetOpenFileNameA(&ofn);

	CoUninitialize();
	return 0;
}

原因是因为GetOpenFileName函数和COINIT_MULTITHREADED不兼容。把COINIT_MULTITHREADED改成COINIT_APARTMENTTHREADED,或者把CoInitializeEx和CoUninitialize删了,问题就解决了。


 

Calling shell functions and interfaces from a multithreaded apartment

When you call or access a shell function or shell interface from a thread that has been initialized as a multithreaded apartment, the function or interface may have its functionality impaired or completely fail.

https://docs.microsoft.com/en-us/troubleshoot/windows/win32/shell-functions-multithreaded-apartment

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巨大八爪鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值