【发布时间】:2014-12-18 01:34:18
【问题描述】:
我正在使用 DllImport 在我的 C# 项目中使用用 C++ 编写的 DLL,我正在使用的函数之一如下所示:
[DllImport("dds.dll", CharSet = CharSet.Auto)]
private static extern int Par(
ddTableResults2 tableResult,
ref parResults ParResult,
int vul
);
parResults 结构体在 C++ 中的定义如下:
struct parResults {
/* index = 0 is NS view and index = 1
is EW view. By 'view' is here meant
which side that starts the bidding. */
char parScore[2][16];
char parContractsString[2][128];
};
C++函数的开始
int STDCALL Par(struct ddTableResults * tablep, struct parResults *presp,
int vulnerable)
我应该如何在 C# 中定义上述结构,以便能够将该结构作为 en 引用发送到 DLL 函数中?
这是我尝试过的,但根本不起作用,我只是收到访问冲突错误
[StructLayout(LayoutKind.Sequential)]
public struct parResults
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public char[,] parScore;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public char[,] parContractsString;
public parResults(int x)
{
parScore = new char[2,16];
parContractsString = new char[2,128];
}
}
【问题讨论】:
-
我认为首先应该发布 C++ 结构的真实定义以及您要导入的函数。您发布的结构的伪造版本让我们想知道与编译的代码和您发布的代码相比还有什么变化。
-
我看看能不能找到!
-
struct ddTableResults怎么样?这是如何在 C++ 和 C# 中声明的。为什么在 C# 中没有通过 ref 传递? -
我正在使用一些开源软件并且文档有限; privat.bahnhof.se/wb758135/dds270-src.zip 但如果使用一维数组和 ddTableResult 的引用,我设法让它工作
-
数据流向何方?从 C# 到本机库。还是在另一个方向?或者在两个方向。我不是特别想在一些开源的非现场链接中四处寻找。我认为这是你要做的,然后在问题中提供声明。感谢您到目前为止所做的修改。
标签: c# c++ struct pinvoke dllimport