永发信息网

如何用C#向C++动态链接库里定义的结构体传值?

答案:2  悬赏:50  手机版
解决时间 2021-02-24 19:51
  • 提问者网友:我没有何以琛的痴心不悔
  • 2021-02-24 03:12
我想在C#里用DllImport调用一个C++动态链接库的函数,其中一个变量是结构体,里面是{char[40] xxx;...}这种形式,由多个字符数组组成。我想问这个结构体在C#里该怎么声明才能正确传值?

C++结构体里面是
struct Type_SSS
{
char aaa[40];
char bbb[100];
};
这样的结构,有int FFF(Type_SSS* sss)这样的函数。
我想在C#里用DllImport调用这个函数,如何声明?
最佳答案
  • 五星知识达人网友:风格不统一
  • 2021-02-24 03:34
不知道你的ddd的结构原型是怎样,你需要预先在C#里定义好ddd,才能在abc里声明,如果ddd内还嵌套,请依次类推
全部回答
  • 1楼网友:酒者煙囻
  • 2021-02-24 05:10
我来专业回答你的问题吧: 在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()
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯