dllexport Struct指针并返回uint8_t

时间:2019-05-07 12:35:19

标签: c# c visual-c++ dllexport

我正在创建要在c#应用程序中使用的c包装器库。在我的.c文件中,该函数定义为:

__declspec(dllexport) uint8_t aes132h_nonce(struct aes132h_nonce_in_out *param)
{ 
 // do something
 return 0; 
} 

在C#中,如何定义函数,该函数需要一个指向结构的指针并返回uint8_t

    [DllImport("AesHelperLib.dll")]
    public static extern uint8_t aes132h_nonce(ref aes132h_nonce_in_out *param);

我是否需要在c#中使用适当的填充和对齐方式来创建结构,还是可以导出结构aes132h_nonce_in_out以便我可以在c#中使用该结构?另外,如何将返回类型定义为uint8_t在c#中不是有效类型?

1 个答案:

答案 0 :(得分:2)

  

我是否需要在c#中使用适当的填充和对齐方式来创建结构

从本质上讲,是的:无法直接在C#中使用C结构声明,也没有1:1映射。请注意,如果您在DLL导入中将参数声明为ref,则也不要使其成为指针。

在某些情况下,例如当仅在API调用之间“传递”值时,您也可以将参数声明为IntPtr(在这种情况下,按值传递)并将其内容视为不透明类型。

  

另外,如何在C#中将返回类型定义为uint8_t不是有效类型?

interop best practices说要使用最接近的等式.NET类型-在这种情况下为byte