关于C++调用C#dll中的函数时获取函数返回值的问题

Doesnotexist"System::String^"convertto"std::basic_string<char,std::c不存在从"System::Stri... Does not exist "System::String ^" convert to "std::basic_string<char, std::c不存在从 "System::String ^" 转换到 "std::basic_string<char, std::char_traits<char>, std::allocator<char>>" 的适当构造函数 c++:#include <iostream>#include <string>//#using "C:\\Users\\10027\\Documents\\visual studio 2015\\Projects\\Project1\\Debug\\ClassLibrary1.dll"#using "C:\Users\10027\Documents\Visual Studio 2015\Projects\Project1\Debug\ClassLibrary1.dll"using namespace std;using namespace ClassLibrary1;int main(){ ClassDlg ^ classdlg = gcnew ClassDlg; classdlg->ShowDalg(); string str = classdlg->sent; system("pause"); return 0;}C#:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ClassLibrary1{ public class ClassDlg { public string sent { get; set; } public void ShowDalg() { Form1 f1 = new Form1(); //f1.Show(); f1.ShowDialog(); sent = f1.str; } }}
没事了,C#里面的string到了C++里面成了CString
应该为CString str = classdlg->sent;(需要afx.h库)
展开
 我来答
Mexico卡卡
2016-12-30 · TA获得超过1万个赞
知道大有可为答主
回答量:1.3万
采纳率:98%
帮助的人:1869万
展开全部
类是没有办法,结构体还行。
我原来回答过的一个类似的问题,楼主参考一下:
其实对于dll来说,类的动太导出一直是一个难题。我早先由于项目需要,也了解过一些这方面的知识,最后还是放弃了。
后来我想到了一个方法。
类的实例通过指针传出来,然后在类的基础上再封装一层,每个公开的函数都封一个函数,参数表里直接把创建的类的指针给传进去,在dll内部再调相应的方法。

楼主不妨也这样试一下。

比如: g()这个函数,就返回一个IntPtr。这个指针就是在dll中创建对象的指针,但在C#里不具体的把它分出来是张三还是王二。dll中增加调用a的函数add的全局导出函数 add2(void*) 然后在add2的函数体内对指针进行转化后再调其add方法。

有点迂回敌后的感觉。

还有,既然需要用C#来调用,dll也可以写成托管的,只要加上运行时支持就好了。那样的类声明加个partal,然后直接添加引用就能象用c#的dll一样用了,这个多方便啊?我还试了一个mirror驱动的,封成了托管DLL,也一样好用。楼主也可以考虑一下。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式