ExpandEnvironmentStrings函数的第二个参数的使用要注意

今天写了一个新类,然后在里面写了ExpandEnvironmentStrings这个函数的调用,灰常高兴得把类封装好了之后,拿到外部调用的时候,在delete的时候肯定会崩溃,我单步,也看了各种数据,都正常,后来我们组长看了一眼就知道了,不亏是专家。下面我上一点代码:

class CFileAssociation
	{
	public:
		CFileAssociation();
		~CFileAssociation();
		public:
		TCHAR m_strDesk;
	};

	CFileAssociation::CFileAssociation()
	{
		ExpandEnvironmentStrings(TEXT("%USERPROFILE%\\Desktop"), &m_strDesk, MAX_PATH);
	}


	CFileAssociation::~CFileAssociation()
	{ 
	}

然后我外部调用了:

	CFileAssociation *file = new CFileAssociation();
<span style="white-space:pre">	</span>...//中间没什么,不写了,商业秘密。
	delete file;
结果只要delete就崩溃,很蛋疼的一件事情。

到这里大家能看出来哪里错了吗?

其实就是ExpandEnvironmentStrings第二个参数的问题,因为第二个参数必须要是类自己的内存空间,所以一般用的一定都是数组,要在类里面被释放掉,否则会遇到越界崩溃的问题。

只需要这么写即可

class CFileAssociation
	{
	public:
		CFileAssociation();
		~CFileAssociation();
		public:
		TCHAR m_strDesk[MAX_PATH];
	};

	CFileAssociation::CFileAssociation()
	{
		ExpandEnvironmentStrings(TEXT("%USERPROFILE%\\Desktop"), m_strDesk, MAX_PATH);
	}


	CFileAssociation::~CFileAssociation()
	{ 
	}


















在 VBScript 中,可以使用 `WScript.Shell` 对象来执行操作系统命令和操作。 以下是使用 `WScript.Shell` 对象在 VBScript 中执行一些常见操作的示例: 1. 打开一个文件: ``` Set WshShell = CreateObject("WScript.Shell") WshShell.Run "notepad.exe C:\test.txt", 1, true ``` 在上面的代码中,`WshShell.Run` 方法可以打开指定路径的文件。第一个参数是要执行的命令,第二个参数是执行方式(0 表示隐藏,1 表示显示),第三个参数是指定是否等待命令执行完成后再继续脚本的执行。 2. 执行一个命令行: ``` Set WshShell = CreateObject("WScript.Shell") WshShell.Run "cmd /c dir", 1, true ``` 在上面的代码中,`WshShell.Run` 方法可以执行指定的命令行。第一个参数是要执行的命令,第二个参数是执行方式(0 表示隐藏,1 表示显示),第三个参数是指定是否等待命令执行完成后再继续脚本的执行。 3. 获取操作系统环境变量的值: ``` Set WshShell = CreateObject("WScript.Shell") value = WshShell.ExpandEnvironmentStrings("%SystemRoot%") MsgBox value ``` 在上面的代码中,`WshShell.ExpandEnvironmentStrings` 方法可以获取指定环境变量的值。在示例中,`%SystemRoot%` 是操作系统中预定义的环境变量,代表 Windows 安装的根目录,`value` 变量将包含该环境变量的值,并在消息框中显示。 希望以上示例可以帮助你理解如何在 VBScript 中使用 `WScript.Shell` 对象。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值