我正在try 创建C#代码,它调用带有C接口的DLL中的函数.我是一名C和C++专家,但我对C#的了解相当有限.我已经设法将DLL加载到C#程序中,并调用其接口使用简单数据类型(如int
甚至字符串)的函数.但这个问题超出了我的能力范围,我希望能得到一些有用的提示.
DLL声明此入口点:
BOOL WINAPI GetUsers(ALLUSERINFO* pInfo, DWORD size, DWORD* count);
其中pInfo
指向具有size
个元素的C struct 数组,GetUsers
函数用数据填充这些元素.count
接收实际填充的数组元素的数量.pInfo
和count
都是仅限出局的.
ALLUSERINFO
的定义为
struct ALLUSERINFO : public USER_INFO2, public PRINCIPAL_INFO
{
WCHAR Name[10];
WCHAR Role[256];
};
它的基类是
struct USER_INFO2
{
WCHAR Name[80];
WCHAR Password[40];
};
struct PRINCIPAL_INFO
{
int PrincipalStatus;
WCHAR UniqueID[39];
};
(WCHAR
是wchar_t
的类型定义.)
我假设我必须将基类转换为ALLUSERINFO
的嵌入成员,但我完全不知道如何在C#中创建包含固定大小C字符串的 struct 数组,然后通过指针将该数组传递给它的第一个元素.
我找到了StructLayout
和MarshalAs
属性,但从我阅读的文档中,我甚至不确定它们是否适合我的情况,更不用说当涉及到 struct 的 struct 数组时,更不用说它们如何工作了,就像本例中的情况一样.
谢谢!