Как использовать C char* в C#...?
Я написал код как на VC++, так и на C#, но не знаю, как вернуть строку
от C до C#...
Что я уже пробовал:
Код VC++ :-
В Ctest1.h
#include<stdio.h> #include "pch.h" #pragma once class __declspec(dllexport) Ctest1 { public: Ctest1(); ~Ctest1(); char* func(); };
В Ctest1.cpp
#include "pch.h" #include "Ctest1.h" char* Ctest1::func() { char sname[] = { "kkk" }; return sname; } Ctest1::Ctest1() {} Ctest1::~Ctest1() {}
В Caller.h
#include "Ctest1.h" #include "pch.h" #ifdef __cplusplus extern "C" { #endif extern __declspec(dllexport) Ctest1* _Create(); extern __declspec(dllexport)void dispose(Ctest1* _pObject); extern __declspec(dllexport)char* func(Ctest1* _pObject); #ifdef __cplusplus } #endif
В Caller.cpp:-
#include "pch.h" #include "Caller.h" Ctest1* _Create() { //Ctest1 c = new Ctest1(); return new Ctest1(); } void dispose(Ctest1* _pObject) { if (_pObject != NULL) { delete _pObject; _pObject = NULL; } } char* func(Ctest1* _pObject) { if (_pObject != NULL) { char* str = _pObject->func(); return str; } }
И в коде C# :-
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { [DllImport("First.dll", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr _Create(); [DllImport("First.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void dispose(IntPtr pCtest1); [DllImport("First.dll", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr func(IntPtr pTest); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { IntPtr ptestClass = _Create(); IntPtr p= func(ptestClass); /// Now how to get the string in C-function dispose(ptestClass); } } }
Итак, сэр, как получить строку, возвращенную из C++, и сохранить ее в C#