[C/c#] Zwracanie stringa z dll w C do programu w c#

0

Witam!
Mam taki oto problem:
Mam dll napisaną w C a w niej funkcję która ma zwracać stringa (docelowo powinna zwracać tablice stringów) do programu napisanego w C#. Funkcja poprawnie zwraca stringa przesłanego przez program ale gdy chce zwrócić stringa "zrobionego" wewnątrz dll mam albo krzaki albo unhandled exception albo exception o naruszeniu pamięci (to jak kombinowałem ze wskażnikami).
Moje pytania:
#Jak to mam przesłać żeby mi c# poprawnie to odczytał jako Stringa?
#Jak to mam przesłać żeby mi c# poprawnie to odczytal jako tablice Stringów? *char[]?

main.h:

#ifndef MAIN_H
#define MAIN_H

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
extern "C" {
__declspec(dllexport) char* ONP(char *fx);
__declspec(dllexport) char ONPvalue(char* fx);
}
#else

1.cpp:

#include "main.h"

extern "C" {
__declspec(dllexport) char* ONP(char* fx)
{
	char zlo [2] = {'L','\0'};
if (strlen(fx)!=0) return fx;
else return zlo;

}
}

fragment Form1.cs:

public partial class Form1 : Form
{
[DllImport("ONP.dll", CharSet = CharSet.Unicode)]
[return: MarshalAs(UnmanagedType.LPStr)]
unsafe public static extern char[] ONP(String fx);
[DllImport("ONP.dll")]
unsafe public static extern char[] ONPvalue(String fx);

    private void button1_Click(object sender, EventArgs e)
    {
        String zlo = ONP(textBox1.Text);
        textBox2.Text = zlo;
        
    }
0

Mam dll napisaną w C
Piszesz że w C a potem pokazujesz kod w C++. Proszę tego nie mylić.

W C++ wszędzie używasz char i char*, a w C# dałeś Charset.Unicode. Nie powinno być przypadkiem CharSet.Ansi?

__declspec(dllexport) char* ONP(char* fx)
{
        char zlo [2] = {'L','\0'};
if (strlen(fx)!=0) return fx;
else return zlo;
}

zwracasz wskaźnik na zmienną lokalną. rzeczywiście, zło.

1 użytkowników online, w tym zalogowanych: 0, gości: 1