【发布时间】:2016-05-19 21:28:39
【问题描述】:
我需要通过 PInvoke 从 C# 调用 C 函数,将指针传递给结构,并且该结构也包含一个指针。
结构体可以在 C 中简化为,
struct myStruct {
int myInt;
float *myFloatPointer;
}
函数声明可以简化为
void myFunc(myStruct *a);
在 C# 中,我这样声明函数
[DllImport("my_library.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void myFunc(ref myStruct a);
不幸的是,我无法确定如何在存在指针参数的情况下在 C# 中声明结构。
C 函数不分配浮点指针指向的内存,它只是修改它。我宁愿在不使用 unsafe 关键字的情况下解决这个问题。
我已经使用 float[] 成功地通过带有 float* 参数的 PInvoke 调用了函数,但这似乎在这里不起作用。
提前致谢。
【问题讨论】:
-
我有一段时间没做c#了,但我相信
unsafe关键字可以让你声明和使用指针 -
首先你需要弄清楚指针指向什么。标量?大批?谁分配?为什么要写呢?
-
那是 C++。这不是有效的 C。