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;
}