目标
将一个过程生成的图像高效且高速地传递到另一个过程.这两个进程在同一台计算机上运行,并在同一桌面上运行.操作系统可能是WinXP,Vista和Win7.
详细说明
第一个过程仅用于控制与产生图像的设备的通信.这些图像大小约为500x300px,每秒可更新数百次.第二个过程需要这些图像来处理它们.第一个过程使用第三方API将图像从设备绘制到HDC.这个HDC必须由我提供.
注意:两个进程之间已建立连接.它们通过匿名管道进行通信并共享内存映射文件视图.
思考
如何以尽可能少的工作实现这一目标?我的意思是既为计算机工作又为我工作(当然;)).我正在使用Delphi,所以也许有一些组件可用于这样做?我想我总是可以绘制到任何图像组件的HDC,将内容保存到内存流,通过内存映射文件复制内容,在另一侧解压缩并将其绘制到目标HDC.我还读到了一个可用于编组图像的IPicture界面.我需要尽可能快,所以开销越小越好.我不希望仅通过复制一些图像来强调机器.
你有什么想法?我很欣赏这一切!
我正在编写某种IPC功能,需要将某些资源从一个进程传递到另一个进程.这适用于Pipe handle等,可以通过DuplicateHandle复制.现在我需要将HDC从一个进程传递到另一个进程.这甚至可能吗?如果是的话:怎么样?
子问题:我假设从一个进程到另一个进程的窗口句柄(HWND)是安全的.这个假设是否正确?
初步的故事
有这个程序使用并行端口与其他硬件同步.它将并行端口输出设置为指定的(字节)值.使用PC的内置并行端口时,这没有问题.目标平台是Windows XP到7,到目前为止一切正常.源代码在Delphi中,可访问且可以修改.
这个怎么运作
在Delphi中,我可以使用io.dll来设置并行端口的值,但也有其他可用的解决方案,如inpout32.dll或port.dll.我打电话PortOut,指定一个端口号和字节值,并设置端口.
我现在想做什么 - 以及我需要帮助的地方
现在改变:这需要在没有内置并行端口的机器上工作(甚至不在主板上).有几种选择:
我目前正在前往并专注于最简单和最便宜的可能性:USB转并口适配器.
主要问题
并行端口适配器之间似乎存在差异,这些适配器仅用于连接打印机和其他似乎更强大的适配器.真的有区别吗?或者我可以使用这5个$打印机适配器中的一个,插入我自己的硬件并从Delphi代码访问端口?或者我需要一个特殊的适配器?有没有人经历过这个?还有一个相关的问题在这里,但不同的适配器类型(如果存在的话)不存在提及.此页面表明确实存在差异:
与可以仅连接到打印机的所有其他USB并行端口相反,这可以连接到大多数硬件.
我希望通过USB存在解决方案,因为这样您就不必打开PC,这意味着可以按需添加适配器.
子问题
您是否有使用PCI(Express)解决方案的经验?如果USB方法不成功,我必须使用一个.
setDelphi中的内存是如何组织的?
我尝试做的是将简单类型转换为类似的集合类型
var
MyNumber : Word;
ShiftState : TShiftState;
begin
MyNumber:=42;
ShiftState:=TShiftState(MyNumber);
end;
Run Code Online (Sandbox Code Playgroud)
德尔福(2009)不允许这样做,我不明白为什么.如果我得到一个数字,其中单个位编码不同的枚举值,那么这将使我的生活变得更容易,我可以像这样投射它.可以这样做吗?
我打算采用的一种方法是:
var
ShiftState : TShiftState;
MyNumber : Word absolute ShiftState;
begin
MyNumber:=42;
end;
Run Code Online (Sandbox Code Playgroud)
但在此之前,我想我会要求内存布局.这是一种感觉,而不是知道我现在对此有何看法.
我一直试图使用几种不同的方法在Windows Phone上访问基于REST的API,但我似乎遇到了将cookie附加到请求中的问题.我已经尝试过这种WebClient方法(现在似乎已经标记为SecurityCritical,因此您不能再继承它并添加代码).我简要地看了一下HttpWebRequest,看起来很麻烦.
现在我正在使用RestSharp,它似乎可以使用,但我仍然遇到问题,我的cookie没有被添加到请求发送时.
我的代码如下:
// ... some additional support vars ...
private RestClient client;
public ClassName() {
client = new RestClient();
client.BaseUrl = this.baseAddress.Scheme + "://" + baseAddress.DnsSafeHost;
}
public void GetAlbumList()
{
Debug.WriteLine("Init GetAlbumList()");
if (this.previousAuthToken == null || this.previousAuthToken.Length == 0)
{
throw new MissingAuthTokenException();
}
RestRequest request = new RestRequest(this.baseUrl, Method.GET);
// Debug prints the correct key and value, but it doesnt seem to be included
// when I run the request
Debug.WriteLine("Adding …Run Code Online (Sandbox Code Playgroud) 我已经阅读了以下文章,该文章应该解释它,但它对我没有帮助:
http://msdn.microsoft.com/en-us/library/ht9h2dk8(VS.80).aspx
我的情况是我想要一个包含数百个图标的dll.图标dll将在各种应用程序中共享和使用.显然,如果一个应用程序只使用数十个,我不希望所有这些图标都加载到内存中.所以我很想知道"资源"(构建操作)是否允许我按需加载图标而不是一次加载所有图标.
有人可以帮忙吗?
处理列表仅用作临时容器的项目列表时- 您建议我使用哪些列表类型?
一世
能够在不造成泄漏的情况下实现这一目标:
function GetListWithItems: ISomeList;
begin
Result := TSomeList.Create;
// add items to list
end;
var
Item: TSomeType;
begin
for Item in GetListWithItems do
begin
// do something
end;
end;
Run Code Online (Sandbox Code Playgroud)
我有什么选择?这是关于德尔福2009年,但为了知识,请提及2010年以上是否有这方面的新内容.
在引入新的异常类型时,我总是不确定如何正确地执行此操作.有共同的约定吗?你怎么做呢?
我对你组织它们的范围感兴趣(将它们保存在它们所使用的单元中?在组件级别上有一个单元吗?包级别?应用程序?)
这也会影响命名.你包括多少背景?是否更好地使它们非常具体(如EPersonIDNotFoundError)或尝试使它们可重用(如ENotFoundError)?
后缀"错误"怎么样 - 什么时候应该添加它并何时离开呢?我无法看到例如以下的逻辑Classes.pas:
EWriteError = class(EFilerError);
EClassNotFound = class(EFilerError);
EResNotFound = class(Exception);
Run Code Online (Sandbox Code Playgroud) 我的应用需要内部日历.我可以像这样创建一个新日历:
var store = await AppointmentManager.RequestStoreAsync(AppointmentStoreAccessType.AppCalendarsReadWrite);
var cacheCalendar = await store.CreateAppointmentCalendarAsync("unique name here");
Run Code Online (Sandbox Code Playgroud)
这成功了,我得到了一个新日历.但是这个日历在手机的内置日历应用程序中可见.我不希望这个日历可见,因为它是内部簿记.
所以我试着像这样隐藏日历:
var store = await AppointmentManager.RequestStoreAsync(AppointmentStoreAccessType.AppCalendarsReadWrite);
var cacheCalendar = await store.CreateAppointmentCalendarAsync("unique name here");
cacheCalendar.IsHidden = true; // <---- make calendar hidden
await cacheCalendar.SaveAsync(); // <---- save; error here
Run Code Online (Sandbox Code Playgroud)
在调用时SaveAsync我得到以下异常:
访问被拒绝.(HRESULT异常:0x80070005(E_ACCESSDENIED))"
为什么我无法在内置手机日历应用程序中隐藏我的日历?这是一个无证件限制吗?还有其他方法吗?
(注意:我在Windows 10 Mobile以及桌面Win 10上测试了这个 - 同样的错误.)
编辑/添加:由于Anthony发现该IsHidden属性在MSDN中被记录为只读,因此Visual Studio中的屏幕截图显示了公共setter(使其编译,运行并且看似合法的调用):
(该应用程序针对的是Win 10 Build 10586 - 也许它是新的,但尚未完成?)
windows-10 windows-10-mobile uwp windows-10-universal uwp-xaml
到目前为止,为了在 .NET 应用程序中存储和检索机密(如凭据),我成功地在 Windows 上使用了CredentialManagement包。现在我想跨平台。
因此,我需要从 .NET Core 跨平台应用程序访问Windows 凭据管理器。如果它在 Windows 上运行 - 使用凭据管理器。如果它在 Linux 上运行 - 不要崩溃(使用钥匙链或其他东西,这是下一步)。
这将如何完成?
(注意:我对 Windows 凭据管理器的替代方案持开放态度,但它们应该提供同等级别的保护。)