日期:2014-05-17  浏览次数:21137 次

C#调C dll时传递IntPtr获取不到值
C/C++ code

//这是在.h头文件中定义的
struct _TestStruct;
typedef struct _TestStruct TestStruct;

//这是在.cpp文件中定义的
typedef struct _TestStruct
{
    TestStruct1 struct1;
    TestStruct2 struct2;
}TestStruct;

__declspec(dllexport) TestStruct* __stdcall Init()
{
    return init();
}

__declspec(dllexport) BOOL __stdcall Update_Info(intptr_t* struct, char* key, char* value)
{
    return update_info((TestStruct*)struct, key, value);
}

//释放
__declspec(dllexport) void __stdcall Free_Struct(intptr_t struct)
{
    return free_struct((TestStruct*)struct);
}


C# code

        [DllImport("Test.dll")]
        public static extern IntPtr Init();

        [DllImport("Test.dll")]
        public static extern bool Update_Info(IntPtr struct, String key, String value);

        [DllImport("Test.dll")]
        public static extern void Free_Struct(IntPtr struct);


因为不需要公开,所以在头文件中定义的结构,在.cpp文件中实现结构。
现在问题是C#要调用dll中这几个函数,运行全部通过,但是带不出值,
请大家帮帮忙,急啊......
在线等,如果解决,必定加分答谢!~

------解决方案--------------------
帮顶一下…………
------解决方案--------------------
http://msdn.microsoft.com/zh-cn/library/aa984739(VS.71).aspx

不建议直接返回结构体类型,最好改成通过参数指针的方式返回结构体类型
http://topic.csdn.net/u/20100308/16/ef639120-ae8c-41f5-9d5d-e9b57e17a302.html