直接上代码
C++ 代码中
#define MEDUSA_EXPORT_API __declspec(dllexport)
static char[1024*2] buff;//使用静态数组返回才不会乱码,即使在调用方法中使用堆内存也会被释放,所以声明全局静态编辑
MEDUSA_EXPORT_API char* getChar()
{
std::string a = "hello";
strcpy(buff,a.c_str());
return buff;
}
C# 代码中
public delegate InPtr getChar();//使用动态指针做返回值
private readonly DllImporter mDll = new DllImporter();
public void runDll()
{
string dllpath = "xxxx.dll";
mDll.Open(dllpath);
InPtr p = mDll.Invoke<getChar,InPtr>();
string str = Marshal.PtrToStringAnsi(p);
}
DllImporter.cs 代码如下
namespace MedusaSimulator
{
class DllImporter
{
[DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(string path);