C++和c#互操作,我用C++写的动态链接库,但是C++里面定义的结构体,C#里面不认识怎么办啊?

 我来答
9897867
2011-07-15 · TA获得超过105个赞
知道答主
回答量:96
采纳率:0%
帮助的人:88.2万
展开全部
我来专业回答你的问题吧:
在C#中调用C++或系统DLL是比较常见的操作。
例如C++中定义的以下结构体:
struct RCEStruct ;
  同时有一个公开方法:
  extern "C" __declspec WORD CALLBACK GetStruct(RCEStruct* pEventStruc);
  我们将它编译为 MyCppDll.DLL
那么我们在C#中可以直接定义相同的结构体和引用GetStruct:

[StructLayout(LayoutKind.Sequential)]
publicstruct RCEStruct publicintpublicintpublicchar[40"MyCppDll.dll", CharSet=publicstaticexternint GetStruct(RCEStruct rce);

  注意C#里定义的结构体应该和C++里定义的一样。这里如果是public string User就有可能出错(具体我没试过,不知道C#是否会自动将char[]转变为string,另外还要注意,在C#中为User赋值时,长度不应超过40)。
  通过这种方式我们就可以向C++传递或者获得结构体。但一个限制就是必须在C#端主动调用GetStruct()
追问
C++里面结构体是这样定义的
typedef struct hash_list_func_pool_s
{
int (*hashFunc)(void*); /*散列算法函数*/
}hash_list_func_pool_t;
typedef struct wlan_hash_obj_s
{
hash_list_func_pool_t *func_pool; /*函数指针池*/
void (*selfInit)(void ); /*hash对象初始化函数*/
}wlan_hash_obj_t;后面那几个指针函数怎么改啊?
追答
int      (*hashFunc)(void*);           /*散列算法函数*/	
void (*selfInit)(void ); /*hash对象初始化函数*/
上面这两个都是函数指针。
hash_list_func_pool_t *func_pool; /*函数指针池*/
下面这个应该是集合指针。
不知道你的程序是要怎么实现功能的,改应该是可以的,根据你的程序功能而定
nyeswllge
2011-07-16 · TA获得超过463个赞
知道答主
回答量:449
采纳率:0%
帮助的人:328万
展开全部
e.g.
struct student
{
char a[20];
int ID;
};
student st[2]=,};
//和数组的初始化差不多。
--如果是指针的话,是无法在定义时被初始化的。
student *st1=new student[2];
就像实例化类的对象一样,指针对象也是不能再定义时被初始化的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a530078398
2011-07-15 · 超过32用户采纳过TA的回答
知道答主
回答量:137
采纳率:0%
帮助的人:98.8万
展开全部
C#中也有结构体啊。你定义了结构体,照样可以用的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式