美文网首页
c#调用c dll

c#调用c dll

作者: 叶迎宪 | 来源:发表于2022-08-17 18:30 被阅读0次

    一、函数引入
    一般采用DllImport方法从Dll中导入函数。c\c++函数默认采用CallingConvention.Cdecl的入参方式。

    声明函数参数时,对于 char *类型的字符串参数,c#中一般声明为
    [MarshalAs(UnmanagedType.LPStr)] string a,
    https://stackoverflow.com/questions/39987435/pass-char-to-c-dll-from-c-sharp-string

    对于c中需要传入结构体指针的,可以使用ref struct的方式声明
    https://stackoverflow.com/questions/28764634/how-to-pass-a-struct-pointer-from-from-c-sharp-to-win32-dll
    https://stackoverflow.com/questions/31702766/how-to-properly-pass-struct-pointer-from-c-sharp-to-c-dll

    二、结构体声明
    声明方式
    [StructLayout(LayoutKind.Sequential)]
    public struct xxx{
    }
    https://stackoverflow.com/questions/9517668/sending-pointer-to-c-sharp-struct-into-c-dll

    如果需要访问结构体中的成员,c#成员声明中还需要加入public属性
    c中int类型,对应c# int类型
    指针类型,对应c# intptr
    数组类型,使用MarshalAs进行类型转换

    MSDN的说明更加详细
    https://docs.microsoft.com/en-us/dotnet/framework/interop/marshalling-classes-structures-and-unions

    相关文章

      网友评论

          本文标题:c#调用c dll

          本文链接:https://www.haomeiwen.com/subject/uqfsgrtx.html