C#调用C++dll 传出字符串

来源:互联网 发布:frobenius矩阵是什么 编辑:程序博客网 时间:2024/05/07 01:29
//C++ 函数返回字符串#include <iostream>#include <string>using namespace std;//错误const char* getStr1(){string s = "1";return s.c_str();}//正确string getStr2(){string s = "1";return s;}//正确const void getStr3(string &s){s = "1";}//正确const void getStr4(char** s){strcpy(*s ,"1");}int main(){const char* s1 = getStr1();cout<<s1<<endl;string s2 = getStr2();cout<<s2<<endl;string s3;getStr3(s3);cout<<s3<<endl;char* s4 = new char[10];getStr4(&s4);cout<<s4<<endl;return 0;}

结果:


.h文件

extern "C" _declspec(dllexport) int _stdcall GetFileID(char** ptrStr,unsigned char* data,int dataLen);
.cpp文件

extern "C" _declspec(dllexport) int _stdcall GetFileID(char** ptrStr,unsigned char* data,int dataLen){int MAX_LEN_Data= 0;FileReq f;string str = "";if(CFileRequest::read(&f,data,dataLen)==0){MAX_LEN_Data = f.bufLen;str = f.fileID;strcpy(*ptrStr,(char*)str.c_str());CFileRequest::clear(f);}return MAX_LEN_Data;}
C# .cs文件

[DllImport("CSocketBLL.dll")]public extern static int GetFileID(ref StringBuilder ptrStr, byte[] data, int dataLen);

ref StringBuilder与char**相对应

注:在调用strcpy(*ptrStr,(char*)str.c_str()); 之前,最好调用C#的代码,为*ptrStr重新开辟空间

0 0
原创粉丝点击