是否可以在npm install
使用NTLM身份验证的HTTP代理后面运行?如果是,我该如何设置服务器的地址和端口,用户名和密码?
我正在将C应用程序移植到C#中.C应用程序从第三方DLL调用许多函数,所以我在C#中为这些函数编写了P/Invoke包装器.其中的一些C函数分配,我有在C#应用程序使用的数据,所以就用IntPtr
的,Marshal.PtrToStructure
并且Marshal.Copy
到本机数据(数组和结构)复制到管理变量.
不幸的是,C#app被证明比C版慢得多.快速的性能分析表明,上述基于编组的数据复制是瓶颈.我正在考虑通过重写它以使用指针来加速C#代码.由于我没有C#中不安全的代码和指针的经验,我需要有关以下问题的专家意见:
unsafe
代码和指针而不是IntPtr
和Marshal
ing有什么缺点?例如,它是否以任何方式更不安全(双关语)?人们似乎更喜欢编组,但我不知道为什么.为了使情况更加清晰,我将一个小的示例代码(实际代码复杂得多)整合在一起.我希望这个例子说明我在谈论"不安全的代码和指针"与"IntPtr和Marshal"时的意思.
MyLib.h
#ifndef _MY_LIB_H_
#define _MY_LIB_H_
struct MyData
{
int length;
unsigned char* bytes;
};
__declspec(dllexport) void CreateMyData(struct MyData** myData, int length);
__declspec(dllexport) void DestroyMyData(struct MyData* myData);
#endif // _MY_LIB_H_
Run Code Online (Sandbox Code Playgroud)
MyLib.c
#include <stdlib.h>
#include "MyLib.h"
void CreateMyData(struct MyData** myData, int length)
{
int i;
*myData = (struct MyData*)malloc(sizeof(struct MyData));
if (*myData != NULL)
{
(*myData)->length = length; …
Run Code Online (Sandbox Code Playgroud) 在下面的代码中,只有第二种方法适用于我(.NET 4.0).FormStartPosition.CenterParent
不会将子表单置于其父表单的中心.为什么?
资料来源:这个问题
using System;
using System.Drawing;
using System.Windows.Forms;
class Program
{
private static Form f1;
public static void Main()
{
f1 = new Form() { Width = 640, Height = 480 };
f1.MouseClick += f1_MouseClick;
Application.Run(f1);
}
static void f1_MouseClick(object sender, MouseEventArgs e)
{
Form f2 = new Form() { Width = 400, Height = 300 };
switch (e.Button)
{
case MouseButtons.Left:
{
// 1st method
f2.StartPosition = FormStartPosition.CenterParent;
break;
}
case MouseButtons.Right:
{
// 2nd …
Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用Visual Studio 2015 Community Edition在Windows 10 Pro上学习UWP应用程序开发.我尝试通过在MainPage.xaml中设置Page标签的Width和Height属性来修改官方"Hello,world"示例的C#版本.有趣的是,当我启动应用程序时,它的大小会有所不同.此外,如果我调整窗口大小然后重新启动它,应用程序似乎记住它以前的窗口大小.
是否可以强制UWP应用程序具有预定义的窗口大小,至少在桌面PC上?
我有一个unsafe
byte*
指向已知长度的本机字节数组.我该怎么把它转换成byte[]
?
一unsafe
sbyte*
到零结尾的本地字符串指针可以被转换成一个C#string
容易,因为有一个转换构造函数用于此目的,但我不能找到一个简单的方法来转换byte*
到byte[]
.
我必须定期测试电影租赁网站的可用性和功能.我写了一个Windows程序,它能够根据脚本自动化Web浏览器,所以这个任务基本上解决了.现在我必须自动化此Web应用程序的移动版本:原生iOS应用程序和原生Android应用程序.
这些应用程序是封闭源代码,因此无法以任何方式进行修改.我认为测试应用程序应该部署在测试设备(iPhone,iPad,Galaxy Tab,Galaxy S II)上,但我必须能够远程控制它.我的意思是,我想在测试设备和PC之间建立连接,将测试脚本从PC上传到设备,运行它们,然后将测试结果下载到PC.测试脚本应启动要测试的应用程序,操纵其GUI(填充编辑框,按钮等),并以某种方式跟踪其响应,例如通过分析GUI(某些GUI元素的存在,其标题等) ,分析屏幕截图和/或检查IP数据包.
我为Windows编写了许多类似的测试程序:我使用了ShellExecute,PostMessage,FindWindow,WinPcap库等,所以我知道这样的程序应该如何工作.但由于我从未编写过移动操作系统的应用程序,我甚至不知道iOS和Android是否有类似的API和库.
我想知道从哪里开始,我的意思是,可以使用哪些SDK和开发人员工具来编写这样的应用程序.我也对商业解决方案感兴趣.我真的很感激任何帮助.
是否可以从Google Chrome扩展程序的代码中读取环境变量,即来自background.js?对于Mozilla Firefox扩展,这是可能的,这样:
var system = require("sdk/system");
console.log(system.env.PATH);
Run Code Online (Sandbox Code Playgroud)
Chrome的等效代码是什么?操作系统是Windows.
javascript windows environment-variables firefox-addon google-chrome-extension
我想编写一个应用程序来管理数百台远程PC上的文件,目录和进程.这些机器上运行有测量程序,目前使用TightVNC/RealVNC手动管理.由于机器数量很大(并且增加),因此需要自动管理.计划是我们的运营商将获得一个可编写脚本的客户端应用程序,他们可以从中向每个远程PC上运行的服务器应用程序发送查询和命令.
对于通信,我想使用基于TCP的自定义协议,但它在行政上很复杂,并且在每个防火墙中打开针孔需要很长时间.幸运的是,有一个程序在每个远程PC上运行内置的基于TinyWeb的自定义Web服务器,并且在每个防火墙中都打开了端口80.这些Web服务器通过启动CGI程序来处理来自中央服务器的请求,该程序加载并发回测量程序的部分日志文件.
所以计划是编写一个CGI程序,并通过HTTP(使用GET和POST)从客户端与它进行通信.虽然(大多数)远程PC都在公司内部网中,但它们遍布全国各地,我希望确保通信安全.以纯文本形式发送操作文件和进程的命令是不明智的.不幸的是,无法触及包含Web服务器的程序,因此我不能简单地为HTTPS准备它.我只能在客户端和CGI程序中实现安全层.我该怎么办?
我已经在SO中阅读了所有类似的问题,但我仍然不确定在这种特定情况下该怎么做.谢谢您的帮助.
我有多个Windows程序(在Windows 2000,XP和7上运行),它们处理不同格式的文本文件(csv,tsv,ini和xml).在文件IO期间不要破坏这些文件的内容是非常重要的.多个程序应该可以安全地访问每个文件,并且应该能够抵御系统崩溃.这个SO答案建议使用进程内数据库,所以我正在考虑使用Microsoft Jet数据库引擎,它能够处理分隔的文本文件(csv,tsv),并支持事务.我之前使用过Jet,但我不知道Jet事务是否真的容忍在提交阶段意外崩溃或关闭,我不知道如何处理非分隔文本文件(ini,xml).我不认为尝试手动实现完整的ACIDic文件IO是个好主意.
在Windows上实现文本文件的事务处理的最佳方法是什么?我必须能够在Delphi和C#中执行此操作.
提前谢谢你的帮助.
让我们看一个基于@ SirRufo的想法的例子.暂时忘掉并发性,让我们专注于容错.
我将文件的内容读入数据结构以修改某些字段.当我正在将修改后的数据写回文件时,系统可能会崩溃.
如果我从不将数据写回原始文件,则可以避免文件损坏.这可以通过创建一个新文件轻松实现,每次保存修改时文件名都带有时间戳.但这还不够:原始文件将保持不变,但新写的文件可能已损坏.
我可以通过在时间戳后面加一个"0"字符来解决这个问题,这意味着该文件尚未经过验证.我将通过验证步骤结束写入过程:我将读取新文件,将其内容与我正在尝试保存的内存中结构进行比较,如果它们相同,则将标志更改为"1".每次程序必须读取文件时,它会通过比较文件名中的时间戳来选择最新版本.只能保留最新版本,可以删除旧版本.
可以通过在读取或写入文件之前等待命名的互斥锁来处理并发.当程序获得对文件的访问权限时,它必须从检查文件名列表开始.如果要读取文件,它将读取最新版本.另一方面,只有在没有比上次读取的版本更新的版本时才能开始写入.
这是一种粗略,过于简单和低效的方法,但它显示了我正在考虑的内容.编写文件是不安全的,但也许有一些像上面那样的简单技巧可以帮助避免文件损坏.
用Java编写的开源解决方案:
10年前,我用C++编写了一个GUI布局引擎,我很好奇它的功能如何在浏览器中得到最好的近似.
在旧的GUI库(如Microsoft Windows')中,小部件的位置和大小通常由四个数字给出:左,顶,宽和高.我的引擎不同之处在于每个数字都加倍,所以你必须指定八个数字:相对左,绝对左; 相对顶部,绝对顶部; 相对宽度,绝对宽度; 相对高度和绝对高度.的相对值应在给予百分数父窗口部件的宽度或高度,并且所述绝对值应在给予像素.对于顶级窗口,"父窗口小部件"是桌面.
例子:
a)400 x 300 px窗口,以屏幕为中心:
const int WINDOW_WIDTH = 400;
const int WINDOW_HEIGHT = 300;
CWindow mainWindow;
mainWindow.setPosition(0.5, -WINDOW_WIDTH / 2, 0.5, -WINDOW_HEIGHT / 2);
mainWindow.setSize(0.0, WINDOW_WIDTH, 0.0, WINDOW_HEIGHT);
Run Code Online (Sandbox Code Playgroud)
b)主窗口右边缘的150 px宽按钮容器面板:
const int PANEL_WIDTH = 150;
CPanel buttonPanel(mainWindow);
buttonPanel.setPosition(1.0, -PANEL_WIDTH, 0.0, 0);
buttonPanel.setSize(0.0, PANEL_WIDTH, 1.0, 0);
Run Code Online (Sandbox Code Playgroud)
c)容器面板顶部有三个按钮(新建,打开,保存),底部有一个按钮(退出):
const int BUTTON_HEIGHT …
Run Code Online (Sandbox Code Playgroud) c# ×5
javascript ×2
pinvoke ×2
windows ×2
android ×1
c ×1
centering ×1
cgi ×1
css ×1
delphi ×1
file-io ×1
forms ×1
galaxy ×1
html ×1
http ×1
http-proxy ×1
https ×1
ios ×1
layout ×1
marshalling ×1
node.js ×1
npm ×1
ntlm ×1
parent-child ×1
transactions ×1
unsafe ×1
uwp ×1
window ×1
windows-10 ×1
winforms ×1