标签: pinvoke

如何使用DMProcessConfigXML配置我的Windows Mobile设备?

我想创建一个C#程序来配置Windows Mobile设备.我在一个名为DMProcessConfigXML的函数上找到了MSDN文档,但没有关于如何使用此函数的说明.

如何在Windows Mobile应用程序中使用此功能?我怀疑它与使用pinvoke有关.

谢谢,
保罗

.net c# pinvoke windows-mobile

0
推荐指数
1
解决办法
4039
查看次数

如何获取Windows API函数的P/Invoke定义?

我想在我的.NET应用程序中使用Win32 API中的函数,但我不知道DLL文件中声明的方法的签名.如果我使用DllImport,我必须提供该方法的定义,以便将其用作"外部方法".

或者还有另一种方法吗?

.net c# pinvoke winapi dllimport

0
推荐指数
1
解决办法
372
查看次数

C#:控制文件传输*

我希望有一个在后台运行的程序,监听任何文件传输,然后取消资源管理器的文件传输机制,并启动它自己的.

我该怎么做呢?有什么dll我可以pinvoke?

为什么?

  • 沿途过滤某些类型的文件.(自动或提示.)
  • "no to all"重复转移选项.
  • 日志记录.
  • 每次我想传输文件时都不必启动程序.
  • 进一步了解幕后发生的事情.
  • 不依赖第三方程序.
  • 我将来会想到的任何其他功能.

*通过文件传输我的意思是通过拖放移动/复制文件/文件夹,但我只关心从磁盘到磁盘的文件传输,而不是从互联网.

c# pinvoke windows-explorer file-transfer

0
推荐指数
1
解决办法
337
查看次数

在 C# 中使用 Windows API 函数

所以,我想在 C# 中使用 CreateProcess API 函数。我知道我必须导入 kernel32.dll 文件并覆盖函数头并将其标记为 extern。我也知道我必须实现函数使用的结构。我遇到的问题如下:在哪里可以看到我需要实现的结构的确切结构?

[DllImport("Kernel32.dll")]
public static extern HANDLE CreateThread(PSECURITY_ATTRIBUTES psa,
                                             DWORD cbStack,
                                             PTHREAD_START_ROUTINE pfnStartAddr,
                                             PVOID pvParam,
                                             DWORD fwdCreate,
                                             PDWORD pdwThreadID);
Run Code Online (Sandbox Code Playgroud)

我需要实现以下结构才能使其正常工作:HANDLE、DWORD...其余的我该怎么做?

c# pinvoke

0
推荐指数
1
解决办法
2283
查看次数

P/Invoke Interop Assistant - 是否像导入 dll 头文件一样简单?

我正在尝试为一组非托管 C++ 库创建包装器。我有库的代码,因此我下载了 P/invoke 互操作助手。

我对 C++ 项目中的导出内容有点困惑。它只是项目的标题吗?

这是一个相当大的工程。我是否只需将每个库的标头加载到命令行工具中并生成 C# 签名?

完成此操作后,我是否需要手动将实际的 dll 导入添加到它们中,如下所示,或者是否有一种方法将其定义为一个 DLL?:

[DllImport(MyDLL.dll)]
Run Code Online (Sandbox Code Playgroud)

.net c# c++ pinvoke interop

0
推荐指数
1
解决办法
3934
查看次数

Kernel32 CopyFile找不到存在的文件c#

我调用了Kernel32的复制文件方法:

[DllImport("kernel32.dll",
           CharSet = CharSet.Unicode,
           CallingConvention = CallingConvention.StdCall,
           SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool CopyFile(
                           [MarshalAs(UnmanagedType.LPStr)] string lpExistingFileName,
                           [MarshalAs(UnmanagedType.LPStr)] string lpNewFileName,
                           [MarshalAs(UnmanagedType.Bool)] bool bFailIfExists);
[DllImport("kernel32.dll")]
    public static extern uint GetLastError();
Run Code Online (Sandbox Code Playgroud)

但是,当我调用它时,它从GetLastError()返回2,这意味着找不到文件.路径肯定存在.

string newfile = Environment.CurrentDirectory + "\\temp" + Path.GetExtension(file);
uint i;
if (!CopyFile(file, newfile, true)) i = GetLastError();
Run Code Online (Sandbox Code Playgroud)

我试图通过这个解决方案绕过LongPath异常.但即使使用普通文件,它似乎也不起作用.任何帮助,将不胜感激.

这是Form1的完整代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Shell32;
using System.Xml;
using System.Diagnostics;
using word = Microsoft.Office.Interop.Word; …
Run Code Online (Sandbox Code Playgroud)

c# windows pinvoke winapi

0
推荐指数
1
解决办法
1037
查看次数

无法从c#调用用c ++编写的dll函数

我需要从C#console app调用一个用c ++编写的dll函数.我编写了编组并在C#中编写了相同的数据类型.但无论如何我得到错误.问题出在哪儿?

这是dll函数的代码

extern "C" {
SAMPLENATIVEDLL_API int GetCardInfoEx(INT64 Card, DWORD Restaurant, DWORD UnitNo, TCardInfoEx* Info, char* InpBuf, DWORD InpLen, WORD InpKind, char* OutBuf, DWORD OutLen, WORD OutKind) {
    int res = getCardInfoEx(Card, Info, UnitNo);
    return res;
}
Run Code Online (Sandbox Code Playgroud)

}

这是TCardInfoEx结构代码

#pragma pack(1)

typedef struct TCardInfoEx {

    WORD    Size;               
    BYTE    Deleted;            
    BYTE    Seize;              
    BYTE    StopDate;           
    BYTE    Holy;               
    BYTE    Manager;            
    BYTE    Blocked;            
    CHAR    WhyLock[256];       

    CHAR    Holder[40];         
    INT64   UserID;             
    DWORD   CardAccountNumber;  
    DWORD   TypeOfDefaulter;    
    WORD    Bonus;              
    WORD    Discount;           

    INT64   Summa;              

    INT64   AvailableSumma;     

    INT64 …
Run Code Online (Sandbox Code Playgroud)

c# c++ dll pinvoke marshalling

0
推荐指数
1
解决办法
251
查看次数

从SHGetFileInfo()返回的图标的最大大小是多少?

使用SHGetFileInfo()函数,我可以获取的图标的最大大小是多少?就功能状态而言,我可以获得一个32x32像素图标(AKA SHGFI_LARGEICON).但是我试图弄清楚是否有办法获得更大的像48x48像素的图标.

我发现有常数像......

public const uint SHGFI_LARGEICON = 0x000000000;     // get large icon
public const uint SHGFI_SMALLICON = 0x000000001;     // get small icon
public const uint SHIL_JUMBO = 0x000000004;     // get jumbo icon 256x256
public const uint SHIL_EXTRALARGE = 0x000000002;     // get extra large icon 48x48
public const uint SHIL_LARGE = 0x000000000;     // get large icon 32x32
public const uint SHIL_SMALL = 0x000000001;     // get small icon 16x16
public const uint SHIL_SYSSMALL = 0x000000003;     // get icon based off of …
Run Code Online (Sandbox Code Playgroud)

c# pinvoke winapi icons dllimport

0
推荐指数
1
解决办法
1533
查看次数

C#Anti-Debug方法OutputDebugString无法正常工作

所以最近我一直在阅读反调试机制和我遇到的流行方法,以检查当前进程是否正在调试OutputDebugString.我已经编写了这段代码,但它没有完全按照预期工作,有人可以解释为什么或我做错了什么?

private static bool stub_OutputDebugString()
{
    uint ErrCode = 0x12A6;
    Native.SetLastError(ErrCode);
    Native.OutputDebugString("System.Core\n");
    if (Marshal.GetLastWin32Error() == (int)ErrCode)
    {
        //Debugger Detected
        return true;
    }
    else
    {
        //No Debugger Detected
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的P/Invoke签名

[DllImport("kernel32.dll", SetLastError = true)]
public static extern void SetLastError(uint dwErrCode);

[DllImport("kernel32.dll", SetLastError = true)]
public static extern void OutputDebugString(string lpOutputString);
Run Code Online (Sandbox Code Playgroud)

注意我读了如何GetLastError不应该从本机环境调用,因为值可以更改,所以我正在使用Marshal.GetLastWin32Error()

代码应该工作,但当我尝试使用windbg或任何其他调试器调试应用程序时,最后一个错误不会改变.

c# debugging pinvoke windbg native-code

0
推荐指数
1
解决办法
1316
查看次数

如何在C#中固定Marshal.AllocHGlobal()分配的内存?

你如何固定Marshal.AllocHGlobal()分配的内存?

我的第一次尝试如下:

int bytes = 10;
IntPtr ip = Marshal.AllocHGlobal(bytes);
GCHandle iph = GCHandle.Alloc(ip, GCHandleType.Pinned);
Run Code Online (Sandbox Code Playgroud)

虽然我认为这只是引脚IntPtr而不是引用的内存块IntPtr.

.net c# pinvoke garbage-collection marshalling

0
推荐指数
1
解决办法
839
查看次数