【发布时间】:2014-02-13 12:14:12
【问题描述】:
这个想法是制作 C# 包装类。我知道结构,但我不知道如何以相同的方式使用指针或以类似的方式使用指针,因为我的 C# 技能没有出现。 (从 C++ 读取到 C# 的翻译)。如果我是对的,C# 中的内存使用情况就大不相同了。
结构是这样的。
public class Unknown
{
[DllImport("UnknownSDK.dll")]
//functions to be translated
}
要翻译的功能:
bool setA(int id, int i);
bool set1(int max, level *many);
bool getA(frame * const * const fame);
void give(frame * const * const fame);
提前致谢。
这是level的结构:
typedef struct level {
int A;
int B;
int fade;
} level;
框架结构:
typedef struct frame {
DWORD header;
DWORD padding;
BYTE bpadding[2];
int asd;
group_t group[1];
} frame;
我希望这能澄清一点。我要说的主要问题是 C# 中的这些指针和 * const * const 结构。稍后我还会告诉你我的研究教会了我什么,但它仍在学习,所以我没有任何测试代码可以展示给你,因为我还没有了解它的全貌。
【问题讨论】:
-
好吧,基本上我还没有尝试过任何事情,因为我遇到了这个问题,即使在我的脑海中我也无法将这些函数转换为 C#。我有一个巨大的 C++ 项目,我想把它放在 .NET 环境中,据我所知,这是使用包装类并继续的最简单方法。
-
@mattimarvi 您阅读了哪些关于 P/Invoke 的信息,我们可以帮助您澄清一下?如果您展示自己为解决问题所做的努力,您将获得更多更好的答案 - 最好提供您尝试过但不起作用的代码。
-
另一种方法是编写 C++/CLI 包装器。您需要学习 C++/CLI 语法,但您无需担心
DllImport等。 -
这会很棘手,因为
frame使用 C struct hack 是可变长度的,因此 p/invoke 无法编组它。
标签: c# c++ translation wrapper dllimport