gpt4 book ai didi

C# 更正来自 C++ 的托管代码

转载 作者:搜寻专家 更新时间:2023-10-31 00:45:26 24 4
gpt4 key购买 nike

我必须在我的 C# 应用程序中使用此外部函数“GetOpenedFiles”(更多信息:http://www.codeproject.com/KB/shell/OpenedFileFinder.aspx)。我不知道,因为我可以编写此函数的包装器:

void GetOpenedFiles(LPCWSTR lpPath, OF_TYPE Filter, OF_CALLBACK CallBackProc, UINT_PTR pUserContext);

原始 C++ 代码 (OpenFilefinder.h)

enum OF_TYPE
{
FILES_ONLY = 1,
MODULES_ONLY = 2,
ALL_TYPES = 3
};

struct OF_INFO_t
{
DWORD dwPID;
LPCWSTR lpFile;
HANDLE hFile;
};

typedef void (CALLBACK* OF_CALLBACK)(OF_INFO_t OpenedFileInf0, UINT_PTR uUserContext );


extern "C" __declspec(dllexport) void ShowOpenedFiles( LPCWSTR lpPath );
extern "C" __declspec(dllexport) void GetOpenedFiles( LPCWSTR lpPath,
OF_TYPE Filter,
OF_CALLBACK CallBackProc,
UINT_PTR pUserContext );

我的 C# 应用程序:

    public enum OF_TYPE : int
{
FILES_ONLY = 1,
MODULES_ONLY = 2,
ALL_TYPES = 3
}

public struct OF_INFO_t
{
?????? dwPID;
?????? lpFile;
?????? hFile;
}

[DllImport("OpenFileFinder.dll", EntryPoint = "GetOpenedFiles")]
static extern void GetOpenedFiles(??????? lpPath, OF_TYPE filter, ????? CallBackProc, ????? pUserContext);

如何在我的 C# 应用程序中正确使用此 dll 函数?

编辑:

这是我最新的代码片段,但从未调用回调函数:

namespace Open64
{
class Program
{

public Program()
{
GetOpenedFiles("C:\\", OF_TYPE.ALL_TYPES, CallbackFunction, UIntPtr.Zero);
}

//void GetOpenedFiles(LPCWSTR lpPath, OF_TYPE Filter, OF_CALLBACK CallBackProc, UINT_PTR pUserContext);

public enum OF_TYPE : int
{
FILES_ONLY = 1,
MODULES_ONLY = 2,
ALL_TYPES = 3
}

public struct OF_INFO_t
{
Int32 dwPID;
String lpFile;
IntPtr hFile;
}

public delegate void CallbackFunctionDef(OF_INFO_t info, IntPtr context);

[DllImport("OpenFileFinder.dll", EntryPoint = "GetOpenedFiles")]
static extern void GetOpenedFiles(string lpPath, OF_TYPE filter, CallbackFunctionDef CallBackProc, UIntPtr pUserContext);

public void CallbackFunction(OF_INFO_t info, IntPtr context)
{
Console.WriteLine("asd");
}

[STAThread]
static void Main()
{
new Program();
}
}

}

最佳答案

这是编码以下类型的方式:

DWORD => Int32
LPCWSTR => String
HANDLE => IntPtr
UINT_PTR => UIntPtr

关于C# 更正来自 C++ 的托管代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6843466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com