gpt4 book ai didi

c# - 如何将 DLL 访问代码从 C++ 移植到 C#

转载 作者:行者123 更新时间:2023-11-30 03:41:43 25 4
gpt4 key购买 nike

我正在尝试从“Fraps”获取 FPS 数据。 github 上有一个名为 LCDHost 的项目已经做到了这一点。显然这是通过 Hook “fraps.dll”完成的

我需要将这段代码移植到我正在处理的 C# 项目中。问题是我不擅长 C++,也没有任何从 C# 访问非托管 dll 的经验。

如果有人可以指导我如何将此代码转换为 C#,我将不胜感激。

#include <stdio.h>
#include <windows.h>

#include "LH_Text.h"

struct FRAPS_SHARED_DATA {
DWORD sizeOfStruct;
DWORD currentFPS;
DWORD totalFrames;
DWORD timeOfLastFrame;
char gameName[32];
};

FRAPS_SHARED_DATA *(WINAPI *FrapsSharedData) ();
int notify(int n,void* p)
{
if( !n || n&LH_NOTE_SECOND )
{
HMODULE frapsDLL;
FRAPS_SHARED_DATA *fsd;
frapsDLL = GetModuleHandleA("FRAPS32.DLL");
if (!frapsDLL) {
if( setText("N/A") ) callback(lh_cb_render,NULL);
} else {
FrapsSharedData = (typeof(FrapsSharedData)) GetProcAddress(frapsDLL, "FrapsSharedData");
if (!FrapsSharedData) {
if( setText("Needs Fraps 1.9C or later!") ) callback(lh_cb_render,NULL);
} else {
if( setText( "Fraps is running & is the right version." ) ) callback(lh_cb_render,NULL);
fsd = FrapsSharedData();
if( setText(QString::number(fsd->currentFPS) ) ) callback(lh_cb_render,NULL);
}
}
}
return LH_Text::notify(n,p) | LH_NOTE_SECOND;
}

真正难倒我的是这条线

FrapsSharedData = (typeof(FrapsSharedData)) GetProcAddress(frapsDLL, "FrapsSharedData");

我不知道它在 C# 中的等价物是什么

可以找到完整的代码here

最佳答案

使用 DllImport 属性,它将调用非托管 dll。只需找到必要的 C 库,从中调用适当的函数即可。非常有用的例子是: https://msdn.microsoft.com/en-us/library/aa984739(v=vs.71).aspx

关于c# - 如何将 DLL 访问代码从 C++ 移植到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37218701/

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