草庐IT

c# - P/Invoke [In, Out] 属性对于编码(marshal)处理数组是可选的吗?

假设有一个具有纯C接口(interface)的native函数,如下所示,从nativeDLL导出://NativeDll.cppextern"C"void__stdcallFillArray(intfillValue,intcount,int*data){//AssumeparametersareOK...//Fillthearrayfor(inti=0;i以下P/Invoke工作正常(使用VS2010SP1测试):[DllImport("NativeDll.dll",CallingConvention=CallingConvention.StdCall)]publicstatice

c# - 在 native 函数回调线程上运行异步任务继续

我有一个C函数FsReadStream,它执行一些异步工作并接受回调。完成后,它使用QueueUserWorkItem调用回调窗口函数。我正在尝试使用异步/等待模式从托管代码(c#)调用此函数。所以我做了以下构造一个Task对象,向构造函数传递一个返回结果的lambda。使用RunSynchronously方法构造一个运行此任务的回调调用异步原生函数,传入回调返回任务对象给调用者我的代码看起来像这样///ReadsintothebufferasmanybytesasthebuffersizepublicTaskReadAsync(byte[]buffer){GCHandlepinned

c# - 在 C# 的 VS 2012 Express for Desktop 中链接到 Windows API 的问题

我是Windows桌面编程的新手(或者至少从Windows3.0开始我就没做过)。我已经安装了VS2012ExpressforDesktop。我创建并运行了一个默认的基于表单的项目。现在我想使用以下行添加WindowsAPIperpinvoke.net:[DllImport("user32.dll")]staticexternboolSetLayeredWindowAttributes(IntPtrhwnd,uintcrKey,bytebAlpha,uintdwFlags);这段代码有两个错误:修饰符“extern”对此项目无效(在属性的右方括号中)预期的类、委托(delegate)、

c# - 从 C# 修改任何窗口的不透明度

是否可以从C#修改所有打开的窗口的不透明度。我在谷歌上搜索最小化窗口,我开始知道它可以通过pInvoke调用实现。它甚至奏效了。同样,是否可以从C#更改所有打开的窗口的不透明度?另外,我不喜欢MFC的东西。还有什么工具可以知道dll中公开的api列表吗? 最佳答案 您可以使用SetLayeredWindowAttributesAPI这样做。Checkthis用于此API的pInvoke版本。来自上述链接的示例代码:[DllImport("user32.dll")]staticexternboolSetLayeredWindowAtt

windows - 指定 pwszTimestampURL 时 CryptUIWizDigitalSign 失败

我在调用CryptUIWizDigitalSign时遇到问题使用我们的公共(public)代码签名证书以编程方式对可执行文件进行签名,而不显示任何UI。该证书是Comodo代码签名证书。当时间戳URL参数设置为null时它工作正常,但每当我传递null以外的任何内容时,调用都会失败(返回零)。问题是没有时间戳就没有副署,因此进一步存在签名有效性问题。环境是Windows7x64。有一个工作标准的互联网连接。从嗅探网络流量来看,CryptUIWizDigitalSign并未尝试联系时间戳服务器。我是通过PInvoke从.NET调用它,但我怀疑这会有什么不同。网上关于此功能的信息不多...

c# - 如何从 C# 调用 C++ DLL 导出函数

这是我第一次尝试混合使用c#和非托管C++,所以这可能是一个非常简单的问题,但我不明白。我需要将一些函数从C++dll调用到C#代码中。这是dll项目的代码:.h文件:#pragmaonce#include#ifdefinedFIRSTDLL_EXPORTS#defineDECLDIR__declspec(dllexport)#else#defineDECLDIR__declspec(dllimport)#endifextern"C"{DECLDIRintAdd(inta,intb);DECLDIRvoidFunction(void);}.cpp文件#include"stdafx.h"

c# - 为什么 'IntPtr.size' 4 在 Windows 64 位上?

我想当我使用IntPtr.Size时我应该得到8.但是,我仍然在64位机器上使用Windows 7得到4x64。为什么? 最佳答案 检查您的fileCPUarchitecture.是x86吗?它应该是任何CPU或x64。 关于c#-为什么'IntPtr.size'4在Windows64位上?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/9206483/

c# - 为什么 'IntPtr.size' 4 在 Windows 64 位上?

我想当我使用IntPtr.Size时我应该得到8.但是,我仍然在64位机器上使用Windows 7得到4x64。为什么? 最佳答案 检查您的fileCPUarchitecture.是x86吗?它应该是任何CPU或x64。 关于c#-为什么'IntPtr.size'4在Windows64位上?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/9206483/

c# - 为什么 .NET 4 和 3.5 对 CloseHandle 异常的处理不同?

我遇到这样一种情况,当在调试器下运行时,对CloseHandle的PInvoke调用在.NET4应用程序中抛出SEHException。不像otherswhohaveencounteredsimilarissuesmigratingfrom3.5to4,我并没有被这种行为特别困扰,并且已经找到了问题所在(第三方库在同一个句柄上两次调用CloseHandle)。但是,我很困惑为什么这种行为不会发生在.NET3.5应用程序中。以下小而完整的示例演示了我遇到的行为(在XPSP3和Win7x64上测试,始终编译为x86):classProgram{staticvoidMain(string[]

c# - 为什么 .NET 4 和 3.5 对 CloseHandle 异常的处理不同?

我遇到这样一种情况,当在调试器下运行时,对CloseHandle的PInvoke调用在.NET4应用程序中抛出SEHException。不像otherswhohaveencounteredsimilarissuesmigratingfrom3.5to4,我并没有被这种行为特别困扰,并且已经找到了问题所在(第三方库在同一个句柄上两次调用CloseHandle)。但是,我很困惑为什么这种行为不会发生在.NET3.5应用程序中。以下小而完整的示例演示了我遇到的行为(在XPSP3和Win7x64上测试,始终编译为x86):classProgram{staticvoidMain(string[]