小编Lou*_*hys的帖子

使用P/Invoke时如何将Win32类型映射到C#类型?

我试图做这样的事情在C#.我发现如何使用此链接中的 P/Invoke C#调用Win32方法.但是我在实现P/Invoke方面遇到了一些困难.

例如,我想访问的方法之一是PdhOpenQuery,签名:

PDH_STATUS PdhOpenQuery(
  __in   LPCTSTR szDataSource,
  __in   DWORD_PTR dwUserData,
  __out  PDH_HQUERY *phQuery
);
Run Code Online (Sandbox Code Playgroud)

我认为相应的C#声明应该是这样的

    [DllImport("Pdh.dll")]
    static extern PDH_STATUS PdhOpenQuery(LPCTSTR szDataSource, 
        DWORD_PTR dwUserData, out PDH_HQUERY *phQuery);
Run Code Online (Sandbox Code Playgroud)

我的问题:

什么是LPCTSTR,以及它在C#中映射的数据类型是什么?
如何映射指针类型DWORD_PTR?pinvoke文章说DWORD映射到UInt32,但指针怎么样?
我认为PDH_STATUS和PDH_HQUERY是库的特定结构(我还不确定).我该如何映射这些?

什么是正确的方法声明,以及如何正确地调用它?

c# pinvoke winapi performancecounter

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

我可以指定MSBuild <Content>标记的输出路径吗?

是否可以为以下文件的输出指定不同的文件夹?

<Content Include="test.stl">
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
Run Code Online (Sandbox Code Playgroud)

.net msbuild visual-studio-2010

10
推荐指数
2
解决办法
6747
查看次数

如何使用退出代码退出程序:C#

如何使用C#中的退出代码退出程序?在java中它会System.exit(int code);

.net c# exit-code exit

9
推荐指数
1
解决办法
1292
查看次数

如何在C#/ Visual Studio中调试谓词?

在调试模式下,如果我将鼠标悬停在谓词上,我看到的只是一些类型名称和一些不可理解的符号.这使得调试代码变得非常困难,例如知道某个变量所持有的谓词.我通常使用lambda表达式分配这个谓词值.有没有办法知道谓词包含什么?

例如,如果我有Predicate<object> myPred变量或List<Predicate<object>> predList变量,我如何调试myPred的值或者运行时包含的predList?

c# debugging lambda visual-studio predicates

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

如何在Windows批处理文件中获取其余参数?

我知道我可以用%0得到第一个参数,用%1得到第二个,依此类推.我也可以用%*获得所有参数.

我可以从第二个参数得到所有参数吗?例如,如果我跑

foo.bat bar1 bar2 bar3 bar4
Run Code Online (Sandbox Code Playgroud)

我怎么才能得到bar2 bar3 bar4

windows batch-file

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

文件由另一个进程使用.怎么知道哪个过程?

我一直在我的程序中得到这个例外.我怎么知道哪个进程锁定了它,无论是通过程序代码还是通过Windows做某事?

System.IO.IOException : The process cannot access the file 'file.ext' because it is being used by another process.

.net windows file-access

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

如何使用.NET反射来确定方法返回类型(包括void)和参数?

如何知道参数的数量和类型?

怎么知道返回类型?

如何检查返回类型是否为空?

.net c# reflection void

8
推荐指数
1
解决办法
7834
查看次数

如何在C#中将字符串转换为byte []

如何从C#中的字符串中获取字节数组?我想将一个字符串传递给这个方法.

c# string byte cryptography bytearray

8
推荐指数
1
解决办法
921
查看次数

如何创建立即完成的IAsyncResult?

我正在实现一个需要实现BeginDoSomethingEndDoSomething方法的接口.然而,我DoSomething并不是真的长期奔跑.为简单起见,假设DoSomething只比较两个变量并返回是否a> b

所以我的BeginDoSomething应该是这样的:

protected override IAsyncResult BeginDoSomething(int a, int b, AsyncCallback callback, object state)
{
     bool returnValue = a > b;
     return ...; //what should I return here?  
     //The method actually already completed and I don't need to wait for anything
 }
Run Code Online (Sandbox Code Playgroud)

我不知道应该归还什么.我只是实现,BeginDoSomething因为我必须,而不是因为我的方法是长期运行.我需要实现自己的IAsyncResult吗?.NET库中是否已有实现?

.net c# delegates asynchronous iasyncresult

8
推荐指数
2
解决办法
8264
查看次数

简单的WCF调用需要花费很多时间

我正在创建一个WCF服务器 - 客户端应用程序.但是,在我的第一次测试中,一个简单的调用(该方法基本上只return true;需要)需要很多时间(~5秒)

我试图追踪它,这是一个呼叫追踪的截图 在此输入图像描述

你可以看到第2行和第3行之间的时间是5秒(虽然老实说我不知道​​第2行和第3行是什么意思)

在客户端(调用者)配置中,绑定是这样的(主要由Visual Studio生成)

    <wsHttpBinding>
        <binding name="WSHttpBinding_IAgent" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
          textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="None">
          </security>
        </binding>
      </wsHttpBinding>
Run Code Online (Sandbox Code Playgroud)

并在服务器上

<wsHttpBinding>
    <binding name="WSHttpBinding_IAgent" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:05:00" sendTimeout="00:05:00"
      bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
      maxBufferPoolSize="16777216" maxReceivedMessageSize="16777216"
      messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
      allowCookies="false">
      <readerQuotas maxDepth="32" maxStringContentLength="16777216"
        maxArrayLength="16384" maxBytesPerRead="16384" maxNameTableCharCount="16384" />
      <reliableSession ordered="true" inactivityTimeout="00:10:00"
        enabled="false" />
      <security mode="None"/>
    </binding>
Run Code Online (Sandbox Code Playgroud)

我称之为这样的方式

var client = new …
Run Code Online (Sandbox Code Playgroud)

.net debugging wcf soap wshttpbinding

8
推荐指数
1
解决办法
1623
查看次数