经过多年使用丑陋的MFC ASSERT宏,我终于决定抛弃它并创建最终的ASSERT宏.
我很好地获取文件和行号,甚至是失败的表达式.我可以显示带有这些的消息框,以及中止/重试/取消按钮.
当我按下Retry时,VS调试器会跳转到包含ASSERT调用的行(而不像某些其他ASSERT函数那样反汇编).所以这一切都非常有效.
但真正酷的是显示失败的函数的名称.
然后我可以决定是否调试它而不试图从文件名中猜出它的功能.
例如,如果我有以下功能:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
ASSERT(lpCreateStruct->cx > 0);
...
}
Run Code Online (Sandbox Code Playgroud)
然后当ASSERT触发时,消息框将显示如下内容:
Function = CMainFrame::OnCreate
Run Code Online (Sandbox Code Playgroud)
那么,在运行时找到当前函数名的最简单方法是什么?
它不应该使用MFC或.NET框架,即使我确实使用这两者.
它应该尽可能便携.
TObject.InstanceSize返回8,但TObject没有声明任何数据成员.根据TObject.ClassType的实现,前4个字节可以解释为指向对象的TClass元数据的指针.任何人都知道其他4个字节的开销是什么?
编辑:显然这是D2009特有的.在旧版本中,它只有4个字节.
以前,我遇到了一个问题,试图在我的ASMX webservice和我的.aspx页面之间共享一个类型定义(webclient)
据我所知,这个建议的"问题"可以通过将客户端中创建的对象数组复制到ASMX代理类定义的新对象数组来解决.
作为C#的新秀,我仍在努力完成这项简单的任务.以下是我的代码的更多部分(上一篇文章中的其他片段保持不变):
...这里是我填充"测试数据"的地方,我想传递给Web服务:
// create an array of MetaData objects
MetaData[] nvPairs = new MetaData[20]; // arbitrary length of 20 pairs
// create arbitrary MetaData objects in the array
nvPairs[0] = new MetaData("Grant Number", "2577-9912");
nvPairs[1] = new MetaData("OPEAnalyst", "Simpson");
Run Code Online (Sandbox Code Playgroud)
...这里我尝试一个函数从我的TRIMBrokerUtil命名空间中定义的"真实"类型(由于代理我不能完全使用)"复制"到该类型的代理版本:
protected TRIMBrokerASMXProxy.ASMXProxy.MetaData[] CopyMetaData(
MetaData utilArray)
{
TRIMBrokerASMXProxy.ASMXProxy.MetaData[] outArray =
new TRIMBrokerASMXProxy.ASMXProxy.MetaData[utilArray.Name.Length];
int i;
for (i = 0; i < utilArray.Name.Length; i++)
{
outArray[i].Name = utilArray.Name;
outArray[i].Value = utilArray.Value;
}
return outArray;
}
Run Code Online (Sandbox Code Playgroud)
...然后在这里我尝试调用该函数(编译器在此行标记2个错误:
TRIMBrokerASMXProxy.ASMXProxy.MetaData[] kvData = …
Run Code Online (Sandbox Code Playgroud) 根据搜索,我希望C#中的Web服务返回一个Dictionary:
Dictionary<int, string> GetValues(string search) {}
Run Code Online (Sandbox Code Playgroud)
Web服务编译很好,但是,当我尝试引用它时,我收到以下错误:"不支持,因为它实现了IDictionary."
¿我能做些什么来使这个工作?,任何不涉及返回DataTable的想法?
我正在构建一个系统,允许人们通过电子邮件提交文本和照片,以及网站上的标准访问.我试图权衡两种策略的安全优势,特别是用于验证用户提交的内容.这里他们如下:
你能想到其他可能的解决方案吗?提出的策略对你来说最有意义吗?
有没有一种简单的方法在PowerShell中(我想使用gacutil.exe)从文本文档中读取路径\程序集并在GAC中注册它?例如,一个.txt文件看起来像:
c:\test\myfile.dll
c:\myfile2.dll
d:\gac\gacthisfile.dll
Run Code Online (Sandbox Code Playgroud)
PowerShell脚本会将其读入流中,然后在找到的每个程序集上运行gacutil?我想这会是这样的:
#read files into array?
foreach ($file in Get-ChildItem -Filter "*.dll" )
{
Write-Host $file.Name
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\gacutil.exe /nologo /i $file.Name
}
Run Code Online (Sandbox Code Playgroud) 我正在扩展信号量的功能.当我意识到我不知道实际信号量的实现并确保我的代码正确运行时,我遇到了障碍,我需要知道这一点.
我知道信号量通过阻塞正在等待它的线程来调用sem_wait()而另一个线程当前已将其锁定.然后阻塞该线程,然后将其放入该信号量的等待列表中.
我的问题与sem_post()上发生的事情有关.是否将下一个线程从等待列表中拉出,设置为锁定线程,并允许解除阻塞?或者发布完全不同的方案?
谢谢!
NSData *data;
data = [self fillInSomeStrangeBytes];
Run Code Online (Sandbox Code Playgroud)
我现在的问题是如何data
以最简单的方式写入文件.
(我已经是NSURL了file://localhost/Users/Coding/Library/Application%20Support/App/file.strangebytes
)