运行ac#console app我在64位Vista上写道.这是代码:
class Class1
{
static void Main(string[] args)
{
Debug.Assert(File.Exists(@"c:\test.ini"));
StringBuilder sb = new StringBuilder(500);
uint res = GetPrivateProfileString("AppName", "KeyName", "", sb, sb.Capacity, @"c:\test.ini");
Console.WriteLine(sb.ToString());
}
[DllImport("kernel32.dll")]
static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);
}
Run Code Online (Sandbox Code Playgroud)
我相信我会得到一个很大的"DUH!" 作为答案,但我不明白为什么这不起作用.除了Debug.Assert之外,此代码是从此页面的c#示例中删除的
我正在使用SQL Server 2005和动态管理视图sys.dm_db_missing_index_details.它继续告诉我Table1确实需要ColumnX和ColumnY的索引,但该索引已经存在!我甚至放弃并重新创建它几次无济于事.
更多细节:视图列出了Column1 equality_columns.Column2列在下面inequality_columns,所以我创建的索引是:
create index IndexA on Table1 (Column1 asc, Column2 asc)
Run Code Online (Sandbox Code Playgroud)
这不正是指数sys.dm_db_missing_index_details告诉我需要吗?
我的C++应用程序存储了一些常见的用户数据%CSIDL_COMMON_APPDATA%\Company\Product.我想确保Users组对此文件夹具有写入权限,而在Vista上则没有.我该怎么做?
我想在Inno Setup脚本中进行基本的字符串验证,以确保字符串是电子邮件地址.我只想看到有一个'@'字符后跟一个'.' 字符,并且这两个字符的两边至少有一个字符.类似于这个正则表达式的东西:
[^@]+@.+\.[^\.]
Run Code Online (Sandbox Code Playgroud)
对象pascal中缺少正则表达式和有限的字符串函数会让我感到悲伤.反转字符串很简单,找到第一个'.' 和'@'然后做一些比较,但没有可用的反向(字符串)功能.
我知道我可以从我写的助手DLL中调用导出的函数,但我希望避免这种解决方案.
还有其他建议吗?
我有一个地狱般的问题,第三方DLL似乎在卸载时导致递归堆栈溢出崩溃.我最终将这个模式放在堆栈上(使用windbg):
<Unloaded_ThirdParty.dll>+0xdd01
ntdll!ExecuteHandler2+0x26
ntdll!ExecuteHandler+0x24
ntdll!KiUserExceptionDispatcher+0xf
<Unloaded_ThirdParty.dll>+0xdd01
ntdll!ExecuteHandler2+0x26
ntdll!ExecuteHandler+0x24
ntdll!KiUserExceptionDispatcher+0xf
...
Run Code Online (Sandbox Code Playgroud)
正如您所猜测的,我没有ThirdParty.dll的源代码.
问:堆栈转储中的前缀"Unloaded_"是什么意思.我以前没碰过这个.
这是可能的,但在Windows服务中使用SHFileOperation是否合适?shell32.dll中的所有SHxxx API函数似乎都是用用户级程序编写的.我可以确定SHFileOperation不会显示GUI吗?