我有2个数字这是0和49之间让我们给他们打电话x
和y
.现在我想得到一些不是x或y的其他数字,但也介于0
和之间49
(我正在使用Objective C,但这更像是一个普遍的理论问题吗?).
我想到的方法是:
int a;
int b;
int c;
do {
a = arc4random() % 49;
} while ((a == x) || (a == y));
do {
b = arc4random() % 49;
} while ((b == x) || (b == y) || (b == a));
do {
c = arc4random() % 49;
} while ((c == x) || (c == y) || (c == a) || (c == b));
Run Code Online (Sandbox Code Playgroud)
但这对我来说似乎有点不好,我不知道,我只是想学习成为一名更好的程序员,最佳做法是什么才能做到这一点?
我想在 nmake 中如果我这样做:
example :
set value=77
echo %%value%%
Run Code Online (Sandbox Code Playgroud)
结果将在控制台上显示 77。
有没有办法让我调用 .cmd 或 .bat 文件来影响 nmake.exe 进程的环境?假设我将该语句放在set value=77
名为“setvalue.cmd”的文件中。然后将 makefile 更改为:
example :
setvalue
echo %%value%%
Run Code Online (Sandbox Code Playgroud)
我得到:
%value%
Run Code Online (Sandbox Code Playgroud)
或者,如果有一种方法可以在命令块中设置宏,那也可以。或者,一种从批处理文件设置宏值的方法,甚至在命令块之外也是如此。
假设我有一个Dictionary<String, Tuple<T1,T2>>
并且我想确定任何字典值是否具有T1的V1.我怎样才能最优雅地做到这一点?
LINQ?
我在C中写了一些WinHttp代码.我正在通过SSL发送请求,为了处理SSL错误,我正在注册一个WINHTTP_STATUS_CALLBACK函数,通过调用WinHttpSetStatusCallback并将dwNotificationFlags设置为WINHTTP_CALLBACK_STATUS_SECURE_FAILURE.
WINHTTP_STATUS_CALLBACK的文档说,当使用dwInternetStatus
= WINHTTP_CALLBACK_STATUS_SECURE_FAILURE 调用回调时,它表示
从服务器检索安全套接字层(SSL)证书时遇到一个或多个错误.lpvStatusInformation参数包含一个标志.有关更多信息,请参阅lpvStatusInformation的说明.
现在,该lpvStatusInformation
参数被输入为LPVOID.但是我从文档中的声明中得出它,在WINHTTP_CALLBACK_STATUS_SECURE_FAILURE的情况下它不被视为指针.
该文件lpvStatusInformation
说:
如果dwInternetStatus参数为WINHTTP_CALLBACK_STATUS_SECURE_FAILURE,则此参数可以是以下值之一.
......这些值是这些十六进制值之一:1,2,4,8,10,20,40.(见WinHttp.h)
这对我来说似乎很清楚.我不应该取消引用指针来获取值.所述 lpvStatusInformation
保持的十六进制值,而不是一个指针.
我能正确地解释这个吗?
我已经用这种方式编写了代码,并且它在过去也有用.我认为!但是现在我得到的lpvStatusInformation
是0x0104f288.这与任何十六进制值都没有任何关系.也不可能通过对可能的值进行OR运算来创建该值(尽管doc在同一个DWORD中没有说明多个状态项).它看起来像是指向我的指针.当我取消引用指针时,我得到0x8,这对应于WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CA
,这至少是有道理的.
问题是,我应该取消引用该指针吗?
这是回调代码:
void CALLBACK Iirf_WinHttpSslStatusCallback( HINTERNET hInternet,
DWORD_PTR context,
DWORD code,
void * pInfo,
DWORD infoLength)
{
if (code == WINHTTP_CALLBACK_STATUS_SECURE_FAILURE) {
ConfigInfo * cfg = (ConfigInfo *) context; // app-specific structure
DWORD details = (DWORD) pInfo; // do not de-reference??
CHAR buffer[32];
CHAR * statusDescription = NULL;
switch (details) {
case …
Run Code Online (Sandbox Code Playgroud) 我有以下CustomAction:
<CustomAction Id="ActionName"
After="InstallFinalize">
<![CDATA[NOT Installed AND (VSTORUNTIME4="#1")]]>
</CustomAction>
Run Code Online (Sandbox Code Playgroud)
问题是当我返回ActionResult.Failure时,CustomAction中存在一个案例.在这种情况下,安装程序将显示错误消息并说安装失败,但应用程序仍然部分安装(文件已经在Program Files中,应用程序显示在卸载程序中).
我希望如果我返回ActionResult.Failure,那么安装将被中止并卸载.如果自定义操作在默认的Visual Studio安装程序中失败,会发生这种情况,我认为这更有意义.
如果自定义操作失败,有人知道如何触发卸载吗?我是否需要为WiX XML添加额外的东西?
在WSH中运行并创建对象的Javascript程序中,假设是Scripting.FileSystemObject或任意COM对象,我在完成它时是否需要将变量设置为null?例如,我建议这样做:
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fileStream = fso.openTextFile(filename);
fso = null; // recommended? necessary?
... use fileStream here ...
fileStream.Close();
fileStream = null; // recommended? necessary?
Run Code Online (Sandbox Code Playgroud)
效果不同于让变量超出范围吗?
这对于Eric Lippert或熟悉JScript引擎实现的Microsoft人员来说确实是一个问题.
我可以这样做:
var obj = new ActiveXObject("My.ProgId");
var methods = GetMethodsViaMagic(obj);
Run Code Online (Sandbox Code Playgroud)
?
(假设COM类型支持IDispatch)
如果是这样,那GetMethodsViaMagic()
会是什么样子?
编辑 - 当然,我尝试的第一件事是for...in
循环,但这对ActiveX对象上定义的方法和属性不起作用.至少,不是我在.NET中定义并通过暴露的对象ComVisible
.
在C#中,我可以像这样定义IDispatch:
[Guid("00020400-0000-0000-c000-000000000046"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IDispatch
{
int GetTypeInfoCount();
System.Runtime.InteropServices.ComTypes.ITypeInfo
GetTypeInfo([MarshalAs(UnmanagedType.U4)] int iTInfo,
[MarshalAs(UnmanagedType.U4)] int lcid);
[PreserveSig]
int GetIDsOfNames(ref Guid riid,
[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr)] string[] rgsNames,
int cNames,
int lcid,
[MarshalAs(UnmanagedType.LPArray)] int[] rgDispId);
[PreserveSig]
int Invoke(int dispIdMember,
ref Guid riid,
[MarshalAs(UnmanagedType.U4)] int lcid,
[MarshalAs(UnmanagedType.U4)] int dwFlags,
ref System.Runtime.InteropServices.ComTypes.DISPPARAMS pDispParams,
[Out, MarshalAs(UnmanagedType.LPArray)] object[] pVarResult,
ref System.Runtime.InteropServices.ComTypes.EXCEPINFO …
Run Code Online (Sandbox Code Playgroud) 我正在尝试重新设置一些ToggleButtons.显然我不能简单地将背景设置为新颜色,因为有一个"控制模板"提供了ToggleButton的视觉行为.所以我需要做的是在XAML中为ToggleButton指定一个替换"ControlTemplate",它提供不同的视觉行为,超出简单的背景颜色.
Q1.它是否正确?
我想从ToggleButton的"默认"controltemplate开始,我从这里抓取,然后修改它.实际上这是Silverlight的默认ControlTemplate,我想,我没有使用Silverlight,我正在使用WPF.但是...... WPF的相应文档页面不包含默认controltemplate的规范.它提供了"a"ControlTemplate,这不是我想要的.
Q2.我不确定我使用Silverlight中的东西是否重要.可以?
在Silverlight示例中,应用于VisualStateManager的vsm的XML名称空间前缀.显然,xml命名空间是
xmlns:vsm = "clr-namespace:System.Windows;assembly=System.Windows"
Run Code Online (Sandbox Code Playgroud)
...但在其他地方我读到这个XML命名空间"不再是必需的".
这一切都非常令人困惑.
在Googlespace中,有一些名为"WPF工具包"的引用,我之前已经接触过 - 我在WPF V4发布之前将它用于自动完成文本框.我猜测一些WPF工具包的东西被卷入WPF for .NET v4.0,这就是我不再需要指定WPF工具包的原因.
Q3.如果有人能证实这种理解,我会很感激.
好的,现在从ToggleButton的"默认"ControlTemplate开始,我的第一步是编译它,然后再进行任何更改.它没有编译,失败了
c:\ dev ...\ToggleButtonStyle1.xaml(23,14):错误MC3074:标识'VisualStateManager.VisualStateGroups'在XML命名空间中不存在' http://schemas.microsoft.com/winfx/2006/xaml/演讲 '.第23行位置14.
足够清楚.然后我查看了在XAML中指定VisualStateManager的文档.令人困惑的是,它指定了两个xml命名空间,其中一个是我实际使用的命名空间.
Q4嗯,我应该使用哪些?其中一个,我DID使用,它没有用.文档完全不清楚指定TWO XML命名空间的含义.(关上他们的头!)
我在项目文件中引用了PresentationFramework.dll:
<ItemGroup>
....
<Reference Include="PresentationFramework" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
我这里没有使用Visual Studio; 我正在使用文本编辑器.我想了解它是如何工作的,而不是要推动的按钮.
感谢您提供的任何帮助.
只是一个评论 - 这似乎非常复杂.我想要做的就是在ToggleButton打开时更改它的颜色.这真的不应该是这么复杂.
在Python教程中,它说:
为什么?我不认为理解是如何"更灵活"的.在我看来,只是语法上的差异.我可以轻松地做到:
def my_round(i):
return str(round(355/113.0, i))
a = map(my_round, range(1, 6))
Run Code Online (Sandbox Code Playgroud)
我不认为map()
这里缺乏灵活性.
谁能详细说明?