小编Per*_*nce的帖子

我可以使用 NULL 代替 0 的值吗?

我可以使用NULL指针代替 的值0吗?

或者这样做有什么问题吗?


比如,例如:

int i = NULL;
Run Code Online (Sandbox Code Playgroud)

作为替代:

int i = 0;
Run Code Online (Sandbox Code Playgroud)

作为实验,我编译了以下代码:

#include <stdio.h>

int main(void)
{
    int i = NULL;
    printf("%d",i);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

0
Run Code Online (Sandbox Code Playgroud)

事实上,它给了我这个警告,这本身是完全正确的:

warning: initialization makes integer from pointer without a cast [-Wint-conversion] 
Run Code Online (Sandbox Code Playgroud)

但结果仍然是等价的。


  • 我是否会因此而进入“未定义行为”?
  • 可以这样使用NULL吗?
  • NULL在算术表达式中用作数值有什么问题吗?
  • 对于这种情况,C++ 中的结果和行为是什么?

我已阅读的答案是什么NULL之间的区别,“\ 0”和0大约之间的区别是什么NULL\0以及0是的,但我没有从那里简洁的信息,如果是很允许的,也是正确的使用NULL作为在赋值和其他算术运算中使用的值。

c c++ null pointers language-lawyer

77
推荐指数
7
解决办法
7224
查看次数

Dotnet 6 集成测试缺少 Deps 文件

在开始之前,我已经尝试了以下所有建议,但均无效:

集成测试 ASP.NET Core 与 .NET Framework - 找不到 deps.json

https://zimmergren.net/unable-to-find-deps-json-dotnet-azure-devops/


所以我试图为 dotnet 6 编写一些集成测试。但是,我WebApplicationFactory抛出以下错误:

System.InvalidOperationException:找不到'/repos/subscription-info-api/tests/SubscriptionInfoApi.Tests.Integration/bin/Debug/net6.0/...

System.InvalidOperationException 找不到“/repos/subscription-info-api/tests/SubscriptionInfoApi.Tests.Integration/bin/Debug/net6.0/testhost.deps.json”。该文件是功能测试正常运行所必需的。您的源项目 bin 文件夹中应该有该文件的副本。如果情况并非如此,请确保项目文件上的属性 PreserveCompilationContext 设置为 true。例如“真实”。为了使功能测试正常工作,它们需要从构建输出文件夹运行,或者必须将应用程序输出目录中的 testhost.deps.json 文件复制到运行测试的文件夹中。导致此错误的一个常见原因是在测试运行时启用了卷影复制。在 Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory 1.EnsureDepsFile() at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory1.EnsureServer() 在 Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory 1.CreateDefaultClient(DelegatingHandler[] handlers) at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory1.CreateDefaultClient(Uri baseAddress,DelegatingHandler[] 处理程序) 在 Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory 1.CreateClient(WebApplicationFactoryClientOptions options) at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory1.CreateClient () 位于 /repos/subscription-info-api/tests/SubscriptionInfoApi.Tests.Integration/UnitTest1.cs 中的 SubscriptionInfoApi.Tests.Integration.UnitTest1.Test1():SubscriptionInfoApi.Tests.Integration.UnitTest1.Test1() 第 14 行在 /repos/subscription-info-api/tests/SubscriptionInfoApi.Tests.Integration/UnitTest1.cs:第 16 行 Xunit.Sdk.TestInvoker 1.<>c__DisplayClass48_0.<<InvokeTestMethodAsync>b__1>d.MoveNext() in /_/src/xunit.execution/Sdk/Frameworks/Runners/TestInvoker.cs:line 264 --- End of stack trace from previous location --- at Xunit.Sdk.ExecutionTimer.AggregateAsync(Func1 asyncAction) 在 / /src/xunit.execution/Sdk/Frameworks/ExecutionTimer.cs …

.net c# xunit asp.net-core

20
推荐指数
2
解决办法
1万
查看次数

更新控制台没有闪烁 - c ++

我试图制作一个控制台侧滚动射击游戏,我知道这不是理想的媒介,但我给自己设置了一些挑战.

问题是无论何时更新帧,整个控制台都会闪烁.有没有办法解决这个问题?

我用一个数组来保存所有必要的字符输出,这是我的updateFrame功能.是的,我知道system("cls")是懒惰的,但除非这是问题的原因,否则我不会为此目的而烦恼.

void updateFrame()
{
system("cls");
updateBattleField();
std::this_thread::sleep_for(std::chrono::milliseconds(33));
for (int y = 0; y < MAX_Y; y++)
{
    for (int x = 0; x < MAX_X; x++)
    {
        std::cout << battleField[x][y];
    }
    std::cout << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)

c++

9
推荐指数
2
解决办法
2万
查看次数

.NET 5 和 Mono

.NET 5 被吹捧为将在 Mac、Windows 和 Linux 上运行的 .NET Core 和 .NET Framework 的完全统一。

Mono 是 .NET Framework 的重新实现,允许 .NET 应用程序在 Linux 上运行。

因此,如果 .NET 5 被广泛用于新的开发或某些东西仍然需要它,那么假设 Mono 基本上会过时并且只有遗留应用程序需要它是否公平?

.net mono

9
推荐指数
2
解决办法
5102
查看次数

单击其他程序工具栏中的按钮

我正在尝试在我没有源的遗留应用程序上自动化一些东西。所以我基本上是在尝试使用 Windows API 来单击我需要的按钮。

有一个msvb_lib_toolbar看起来像这样的工具栏:

工具栏

我可以通过使用以下代码来处理它(我认为):

IntPtr window = FindWindow("ThunderRT6FormDC", "redacted");
IntPtr bar = FindWindowEx(window, IntPtr.Zero,"msvb_lib_toolbar",null);
Run Code Online (Sandbox Code Playgroud)

查看文档,似乎我应该能够使用SendMessageTB_PRESSBUTTON单击这些按钮的消息:

[DllImport("user32.dll")]
public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何设置wParamlParam单击栏上的所需按钮。该文档似乎也没有多大帮助。

您能否提一些建议?


根据评论,我也尝试过UIAutomation. 我可以使用以下代码找到工具栏:

AutomationElement mainWindow = AutomationElement.RootElement.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "Migration Expert"));
AutomationElement toolbar = mainWindow.FindFirst(TreeScope.Subtree, new PropertyCondition(AutomationElement.ClassNameProperty, "msvb_lib_toolbar"));
Run Code Online (Sandbox Code Playgroud)

但是从这里开始,我不确定该怎么做,因为 Spy++ 没有显示此对象的其他子项:

间谍++

看着这个Current属性,AutomationElement我看不到任何东西跳出来,但BoundingRectangle似乎表明我找到了正确的元素。

调试器

使用inspector.exe也不会指示工具栏上的任何子项。

检查员

c# winapi user32 ui-automation

6
推荐指数
1
解决办法
476
查看次数

有没有办法将solidworks文件作为资产导入Unity?

我正在尝试使用统一游戏引擎编写一个简单的国际象棋游戏.但是,我无法弄清楚如何将我在Solidworks中创建的资产导入Unity.

有可能吗?

export solidworks unity-game-engine

5
推荐指数
2
解决办法
1万
查看次数

修复拖放冻结资源管理器

我有一个应用程序,它允许将数据拖放到其中,然后再对其执行可能很长的操作。这工作正常,但是,当我的应用程序正在处理时,资源管理器窗口会冻结。有没有什么办法可以“释放”它,只要我复制了文件列表?

我目前的代码是:

    private void MainForm_DragDrop(object sender, DragEventArgs e)
    {
        ClearTempFiles(); //Clear all files before populating
        string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); //Get the filepaths for the dragdrop data
        List<string> toParse = new List<string>();
        foreach (string file in files) 
        {
            FileAttributes attr = File.GetAttributes(file);
            if (attr.HasFlag(FileAttributes.Directory)) //If a folder has been included, add all files from within
            {
                toParse.AddRange(DirSearch(file));
            }
            else
            {
                toParse.Add(file); //Add files
            }
        }
        CurrentJobData = new JobData(toParse); //Create new JobData from these files <---- Takes up to a few …
Run Code Online (Sandbox Code Playgroud)

c# winforms

5
推荐指数
1
解决办法
1228
查看次数

否定`.Where()`LINQ表达式

我知道您可以执行以下操作:

enumerable.Where(MethodGroup).DoSomething();
Run Code Online (Sandbox Code Playgroud)

并且这实现了同样的事情:

enumerable.Where(x => MyMethod(x)).DoSomething();
Run Code Online (Sandbox Code Playgroud)

但是,我希望实现与此相反并选择方法返回false的项目.很明显,第二种情况如何做到这一点:

enumerable.Where(x => !MyMethod(x)).DoSomething();
Run Code Online (Sandbox Code Playgroud)

然而,对于第一种情况,情况并非如此,因为您无法将!运算符应用于a MethodGroup.有可能以类似的方式实现这种" .WhereNot"效果,MethodGroups还是我必须自己滚动(或使用lambdas)?

c# linq lambda

5
推荐指数
2
解决办法
1275
查看次数

外部应用程序窗口移动时移动窗口

我有一个总是在顶部的应用程序(基本上是一个状态显示),我想跟随另一个程序,并始终坐在最小化按钮的左侧.

我可以Rect使用以下代码来表示"目标"过程,然后我可以将其与偏移量配对以生成叠加层的初始位置.

获取HWnd IntPtr:

private IntPtr HWnd = Process.GetProcessesByName("targetapplication")[0].MainWindowHandle; 
Run Code Online (Sandbox Code Playgroud)

user32.dll以下函数声明函数:

[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);
Run Code Online (Sandbox Code Playgroud)

适当的struct:

[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
    public int Left;
    public int Top;
    public int Right;
    public int Bottom;
}
Run Code Online (Sandbox Code Playgroud)

然后按需调用它.

但是,我想避免不断轮询这个值,所以我想挂钩到目标应用程序并在目标窗口移动时做出响应.

浏览user32.dll文档,我能看到的唯一方法是使用SetWindowsHookEx().但是,我并不完全确定如何从这里拦截一个事件.

我相信目标应用程序是基于WinForms但我无法确定.因此,让我响应目标Move事件或直接响应某些Windows消息的解决方案都很有用.

关于如何进行的任何想法?

c# pinvoke winapi user32 winforms

5
推荐指数
1
解决办法
1240
查看次数

.NET运行时错误80131506-将Lambda传递给本机函数

所以我收到这个错误,看起来好像是一个损坏的垃圾回收:

应用程序崩溃并显示“ .NET运行时内部错误”

完整的错误是:

由于.NET运行时在IP 71C571C8(71B20000)上出现内部错误,退出代码为80131506,该过程已终止。

它正在运行:

框架版本:v4.0.30319

当重复运行此功能时,会不一致地发生:

public static int GetMdiTitledChildWindows(IntPtr parentWindow)
        {
            IntPtr mdiClient = FindWindowEx(parentWindow, IntPtr.Zero, MdiClient, "");
            List<IntPtr> handles = new List<IntPtr>();
            EnumChildWindows(mdiClient, (hwnd, param) =>
            {
                handles.Add(hwnd);
                return true;
            }, IntPtr.Zero);
            int counter = 0;
            foreach (IntPtr handle in handles)
            {
                StringBuilder builder = new StringBuilder();
                GetWindowText(handle, builder, GetWindowTextLength(handle)+1);
                if (builder.Length > 0)
                {
                    counter++;
                }
            }
            return counter;
        }
Run Code Online (Sandbox Code Playgroud)

其中FindWindowEx()EnumChildWindows()并且GetWindowText()都的P / Invoke签名定义类似于此:

[DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static …
Run Code Online (Sandbox Code Playgroud)

.net c# pinvoke winapi garbage-collection

5
推荐指数
1
解决办法
2108
查看次数