在C#中使用C结构

时间:2013-06-17 18:40:20

标签: c# c struct

我有一个C头文件:

typedef struct CallbackData
{
    Int 32          linkType;                   
    string          strUrl;                                   
} CallbackData

我在C#中有一个函数:

private Int32 CallbackFunction(IntPtr intPtr, Int32 callbackData, Int32 commandInfo, object callbackObject)
    {
    if (callbackObject.GetType() == typeof(CallbackData))
    {
           var callbackData = (CallbackData) callbackObject;
           callbackData.strUrl = "Something";
           return 0;
    }
    if (callbackData == 283)
    {
           return 0;
    }
    Console.WriteLine(callbackData);
    return 0;
}

我想将CallbackData结构导入C#,然后检查传递到callbackObject的{​​{1}}是否属于CallbackFunction类型。然后我想设置CallbackData的strUrl。

我在另一个C#文件中创建了一个这样的结构:

callbackObject

VS说“[StructLayout(LayoutKind.Sequential)] public struct CallbackData { Int32 linkType; string strUrl; } 不包含object的定义,并且没有可以找到接受类型为strUrl的第一个参数的扩展方法strUrl(是吗?缺少using指令或汇编引用?)“。如果对象的strUrl类型为object

,如何编辑该对象的strUrl

编辑:更改了我投射传入参数的方式。

1 个答案:

答案 0 :(得分:0)

默认情况下,在C#中将任何内容声明为private,因此您需要像这样定义结构:

[StructLayout(LayoutKind.Sequential)]
public struct CallbackData
{
    public Int32 linkType;
    public string strUrl;
}